在 Linux 上运行 Oracle 数据库时,“调优”通常分为 操作系统层(Linux)调优 和 数据库层(Oracle)调优 两大部分。下面我按实战思路给你一个系统化的调优指南。
常见关键参数(示例为 16G–64G 内存环境):
# 共享内存
kernel.shmmax = 8589934592 # 单段最大共享内存(示例8G)
kernel.shmall = 2097152 # 共享内存总页数
kernel.shmmni = 4096
# 信号量
kernel.sem = 250 32000 100 128
# 文件句柄
fs.file-max = 6815744
# 网络
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_max = 4194304
net.core.wmem_max = 4194304
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 65536 4194304
# Swap 行为
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
执行:
sysctl -p
Oracle 用户示例:
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft memlock unlimited
oracle hard memlock unlimited
THP 对 Oracle 性能有害:
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(grub 或 rc.local):
transparent_hugepage=never
减少 TLB miss,提高 SGA 访问效率。
步骤简述:
/etc/sysctl.confvm.nr_hugepages = 4096
sysctl -pUSE_LARGE_PAGES=TRUEecho deadline > /sys/block/sda/queue/scheduler
(SSD 可用 none / mq-deadline)
numactl --interleave=all
ALTER SYSTEM SET SGA_TARGET=4G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=2G SCOPE=SPFILE;
经验:
MEMORY_TARGET / SGA_TARGET / PGA_AGGREGATE_TARGET
建议:
SELECT * FROM v$log;
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT');
使用:
optimizer_index_cost_adj = 30~50
cursor_sharing = FORCE (谨慎)
db_writer_processes = CPU核数/2
top / htopiostat -x 1vmstat 1sar -u -r -dv$sysstatv$sessionv$sql❌ 只调 Oracle 不调 OS
❌ swappiness=0(易 OOM)
❌ 开 THP
❌ SGA 超过物理内存
❌ 忽视 I/O 延迟
如果你愿意,可以告诉我:
我可以给你一套针对性调优方案。