在 Ubuntu 上“优化 Oracle”通常包含几个层面:系统层面(OS)优化、Oracle 数据库参数优化、存储与文件系统优化、内存与内核参数优化。下面我按生产环境常见做法给你一个较完整的优化清单(以 Oracle 19c 为例,11g/12c 思路类似)。
5.15+(22.04)systemctl disable bluetooth
systemctl disable cups
systemctl disable avahi-daemon
apt install linux-tools-common
cpupower frequency-set -g performance
编辑 /etc/sysctl.conf:
# 共享内存
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
编辑 /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
确保 PAM 加载:
session required pam_limits.so
mkfs.xfs /dev/sdb
挂载参数:
/dev/sdb /u01 xfs defaults,noatime,nodiratime 0 0
echo deadline > /sys/block/sdb/queue/scheduler
(SSD 可用 none / mq-deadline)
ALTER SYSTEM SET sga_target=8G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=SPFILE;
经验值:
ALTER SYSTEM SET processes=1000 SCOPE=SPFILE;
ALTER SYSTEM SET filesystemio_options=SETALL SCOPE=SPFILE;
ALTER SYSTEM SET disk_asynch_io=TRUE SCOPE=SPFILE;
numactl --interleave=all
计算后写入 /etc/sysctl.conf:
vm.nr_hugepages = 4096
并:
sysctl -p
# OS
top, iostat -x 1, vmstat 1
# Oracle
SELECT * FROM v$sysstat;
SELECT * FROM v$sgainfo;
❌ Ubuntu 不适合 Oracle(其实可以,只是不如 RHEL 官方支持好)
❌ 默认参数直接上生产
❌ 忽视 HugePages 和 async IO
如果你愿意,可以告诉我:
我可以给你针对性参数模板。