下面从 操作系统层、Oracle 实例层、存储层、监控与常见问题 几个维度,系统性地说明 Oracle 在 Linux 下的调优思路和方法。内容偏实战,适合 DBA 和运维。
重点关注内存、网络、文件句柄。
# 内存相关
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
vm.overcommit_memory = 2
# 文件句柄
fs.file-max = 6815744
# 网络
net.core.rmem_max = 4194304
net.core.wmem_max = 4194304
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 65536 4194304
net.ipv4.tcp_tw_reuse = 1
执行:
sysctl -p
Oracle 用户必须配置:
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft stack 10240
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
Oracle 官方强烈建议关闭 THP
减少 TLB miss,提高 SGA 访问效率。
grep Huge /proc/meminfo
计算 HugePages 数量:
echo $(( SGA_MB / 2 )) # 2MB per page
配置:
vm.nr_hugepages = 4096
SGA_TARGET
SGA_MAX_SIZE
PGA_AGGREGATE_TARGET
建议:
ALTER SYSTEM SET MEMORY_TARGET=16G SCOPE=SPFILE;
PROCESSES
SESSIONS
OPEN_CURSORS
经验值:
PROCESSES = 并发用户数 * 1.5
OPEN_CURSORS = 300~1000
DB_CACHE_SIZE
SHARED_POOL_SIZE
LOG_BUFFER
UNDO_RETENTION
cat /sys/block/sda/queue/scheduler
推荐:
echo deadline > /sys/block/sda/queue/scheduler
避免争用
EXEC DBMS_STATS.GATHER_TABLE_STATS('USER','TABLE');
@?/rdbms/admin/awrrpt.sql
@?/rdbms/admin/ashrpt.sql
重点看:
top
vmstat 1
iostat -x 1
sar -u 1
V$SESSION
V$SQL
V$SYSSTAT
V$WAITSTAT
| 问题 | 原因 | 解决 |
|---|---|---|
| CPU 高 | 硬解析 | 绑定变量 |
| IO 高 | 索引缺失 | 建索引 |
| 内存 swap | swappiness 高 | 调低 |
| 连接慢 | 网络参数 | 调整 tcp |
| ORA-4031 | shared pool 小 | 增大 |
如果你愿意,可以告诉我:
我可以给你 具体参数配置方案。