在 Ubuntu 上运行 Oracle 数据库(通常是 Oracle 19c / 21c,企业版或 XE),优化可以从 系统层、数据库层、SQL 层、运维监控 四个维度来做。下面是一套比较实用的优化指南。
编辑 /etc/sysctl.conf:
fs.file-max = 6815744
kernel.sem = 250 32000 100 128
kernel.shmmax = 4294967295
kernel.shmall = 1073741824
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
执行:
sysctl -p
编辑 /etc/security/limits.conf:
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
systemctl disable snapd
systemctl disable bluetooth
ALTER SYSTEM SET SGA_TARGET=4G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=1G SCOPE=SPFILE;
XE 版本示例:
SGA_TARGET=1G
PGA_AGGREGATE_TARGET=512M
ALTER SYSTEM SET PROCESSES=500 SCOPE=SPFILE;
ALTER SYSTEM SET SESSIONS=600 SCOPE=SPFILE;
ALTER SYSTEM SET UNDO_RETENTION=1800;
ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE;
EXPLAIN PLAN FOR
SELECT * FROM emp WHERE deptno=10;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
CREATE INDEX idx_emp_dept ON emp(deptno);
避免:
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');
Oracle XE 限制:
✅ 优化建议:
@?/rdbms/admin/awrrpt.sql
tail -f $ORACLE_BASE/diag/rdbms/*/trace/alert*.log
| 问题 | 可能原因 |
|---|---|
| CPU 高 | 缺少索引 |
| IO 高 | 全表扫描 |
| 内存不足 | SGA 太小 |
| 连接慢 | processes 太小 |
| 锁等待 | 事务未提交 |
如果你能告诉我:
我可以给你 更针对性的优化方案(甚至直接给参数配置)。