下面从 Linux 操作系统层 + Oracle 数据库层 两个维度,系统性地讲一下 Oracle 在 Linux 上的常见调优点,适合生产环境参考。
重点关注内存、网络、文件句柄。
# 共享内存(Oracle SGA 需要)
kernel.shmmax = 物理内存的 80%(字节)
kernel.shmall = shmmax / PAGE_SIZE
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
生效:
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
Oracle 强烈建议关闭 THP
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
永久生效(grub 或 rc.local)。
减少 SGA 分页,提升性能。
步骤简述:
vm.nr_hugepagesmemlock 足够USE_LARGE_PAGES=TRUEecho deadline > /sys/block/sda/queue/scheduler
noatime,nodiratime
-- 示例(总内存 64G)
SGA_TARGET = 40G
SGA_MAX_SIZE = 40G
PGA_AGGREGATE_TARGET = 12G
原则:
SELECT * FROM v$log;
定期收集:
EXEC DBMS_STATS.GATHER_DATABASE_STATS;
@?/rdbms/admin/awrrpt.sql
DB_CACHE_SIZE
SHARED_POOL_SIZE
LOG_BUFFER
OPEN_CURSORS
SESSION_CACHED_CURSORS
top, vmstat, iostatv$sysstat, v$session| 现象 | 可能原因 |
|---|---|
| CPU 高 | SQL 差 / 缺索引 |
| IO 高 | redo / 全表扫描 |
| 内存 Swap | SGA 过大 / 无 HugePages |
| 连接慢 | 监听 / 网络 |
如果你愿意,可以告诉我:
我可以给你一套针对性配置模板。