下面从 操作系统(Linux) 和 Oracle 数据库 两个层面,系统性地说明常见的 Oracle 在 Linux 上的优化配置要点。适用于 Oracle 11g / 12c / 19c 等主流版本。
典型优化参数示例:
# 共享内存(SGA 用)
kernel.shmmax = 68719476736 # 64GB,建议 >= SGA
kernel.shmall = 16777216 # shmmax / page_size
kernel.shmmni = 4096
# 信号量(Oracle 进程并发)
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
# 交换行为
vm.swappiness = 10
执行:
sysctl -p
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 firewalld
systemctl stop firewalld
(生产环境可用 iptables 精确控制)
减少 TLB miss,提升 SGA 性能。
grep Huge /proc/meminfo
配置示例(假设 SGA=32G):
vm.nr_hugepages = 16384 # 32GB / 2MB
并在 /etc/security/limits.conf:
oracle soft memlock unlimited
oracle hard memlock unlimited
ALTER SYSTEM SET sga_target=24G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=8G SCOPE=SPFILE;
建议:
MEMORY_TARGET
或
SGA_TARGET + PGA_AGGREGATE_TARGET
SELECT group#, bytes FROM v$log;
EXEC DBMS_STATS.GATHER_DATABASE_STATS;
ALTER SYSTEM SET processes=2000 SCOPE=SPFILE;
ALTER SYSTEM SET open_cursors=1000 SCOPE=BOTH;
ALTER SYSTEM SET session_cached_cursors=200 SCOPE=BOTH;
ALTER SYSTEM SET optimizer_index_cost_adj=50 SCOPE=BOTH;
-- 等待事件
SELECT event, count(*) FROM v$session_wait
GROUP BY event ORDER BY 2 DESC;
-- TOP SQL
SELECT sql_id, elapsed_time FROM v$sql
ORDER BY elapsed_time DESC;
如果你能提供:
我可以给你一套 针对性配置方案。