“优化 Ubuntu 上的 Oracle”通常涉及系统层(OS)+ Oracle 数据库层(DB)+ 资源与参数三方面的调优。下面给你一份实用、可落地的优化清单,适用于 Oracle 11g / 12c / 19c 在 Ubuntu(20.04/22.04)上的典型场景。
Oracle 对共享内存、文件句柄、异步 IO 很敏感。
# 共享内存
kernel.shmmax = 68719476736
kernel.shmall = 16777216
kernel.shmmni = 4096
# 信号量
kernel.sem = 250 32000 100 128
# 文件句柄
fs.file-max = 6815744
# 网络
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
# 异步 IO
fs.aio-max-nr = 1048576
执行:
sysctl -p
Oracle 用户必须放开限制:
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
oracle hard stack 32768
减少系统开销:
systemctl disable snapd
systemctl disable bluetooth
systemctl disable cups
mkfs.xfs /dev/sdb
挂载参数示例:
/dev/sdb /u01 xfs defaults,noatime,nodiratime 0 0
假设服务器 32G 内存:
ALTER SYSTEM SET sga_target = 16G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target = 4G SCOPE=SPFILE;
ALTER SYSTEM SET memory_target = 0 SCOPE=SPFILE;
生产环境不建议用 AMM(memory_target)
ALTER SYSTEM SET processes = 1000 SCOPE=SPFILE;
ALTER SYSTEM SET sessions = 1100 SCOPE=SPFILE;
SELECT group#, bytes, status FROM v$log;
关闭非必要自动任务(可选):
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE;
ALTER SYSTEM SET filesystemio_options = SETALL SCOPE=SPFILE;
ALTER SYSTEM SET disk_asynch_io = TRUE SCOPE=SPFILE;
减少 TLB miss:
# 计算 hugepages 数量
grep Hugepagesize /proc/meminfo
示例(16G SGA):
vm.nr_hugepages = 8192
top
iostat -x 1
vmstat 1
SELECT * FROM v$sysstat;
SELECT * FROM v$session_wait;
SELECT * FROM v$sql ORDER BY elapsed_time DESC;
| 问题 | 可能原因 |
|---|---|
| CPU 高 | 全表扫描、缺少索引 |
| IO 高 | Redo 小、未用 AIO |
| 内存不足 | SGA 配置不合理 |
| 连接慢 | listener、DNS 问题 |
你可以告诉我:
我可以直接给你定制化参数方案。