你提到的 “Ubuntu + Oracle 如何优化”,通常指 在 Ubuntu 系统上运行 Oracle 数据库(如 Oracle 19c / 21c / 23c)时的性能与系统优化。下面从 系统层、Oracle 参数层、存储与内核、运维建议 四个方面系统说明。
Oracle 对共享内存、信号量、文件句柄要求很高。
编辑 /etc/sysctl.conf:
# 共享内存
kernel.shmmax = 17179869184
kernel.shmall = 4194304
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
执行:
sysctl -p
编辑 /etc/security/limits.conf:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
确保 PAM 加载:
/etc/pam.d/common-session
session required pam_limits.so
systemctl disable snapd
systemctl disable ufw
systemctl stop ufw
(生产环境不建议完全关防火墙,应做白名单)
mkfs.xfs /dev/sdb
挂载参数(示例):
/dev/sdb /u01 xfs defaults,noatime,nodiratime 0 0
ALTER SYSTEM SET sga_target=8G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=SPFILE;
ALTER SYSTEM SET memory_target=0 SCOPE=SPFILE;
⚠ 建议:
ALTER SYSTEM SET processes=500 SCOPE=SPFILE;
ALTER SYSTEM SET sessions=600 SCOPE=SPFILE;
ALTER SYSTEM SET log_buffer=16M SCOPE=SPFILE;
ALTER SYSTEM SET db_writer_processes=4 SCOPE=SPFILE;
ALTER SYSTEM SET undo_retention=1800;
典型结构:
/u01 → Oracle 软件
/u02 → 数据文件
/u03 → redo / undo
/u04 → 备份
避免所有文件在同一磁盘。
ALTER DATABASE ADD LOGFILE GROUP 4 ('/u03/redo04.log') SIZE 300M;
如果条件允许:
常见依赖:
apt install -y binutils compat-libcap1 gcc libaio1
sysctl -w vm.nr_hugepages=4096
Oracle 中:
USE_LARGE_PAGES=TRUE
timedatectl set-ntp true
-- 看等待事件
SELECT event, count(*) FROM v$session_wait GROUP BY event;
-- 看慢 SQL
SELECT * FROM v$sql ORDER BY elapsed_time DESC;
✅ Ubuntu + Oracle 可用,但需“手动调” ✅ 内核参数必须改 ✅ 存储分离 + XFS + HugePages ✅ 生产环境优先 Oracle Linux
如果你愿意,可以告诉我:
我可以给你一份 针对性的优化清单或参数模板。