在 Linux 上运行 Oracle 数据库时,内存调优是关键性能优化点之一。下面从操作系统层、Oracle 实例层、常见参数、监控方法几个维度系统说明。
Oracle 官方推荐在 Linux 上使用 HugePages,减少 TLB miss,提升性能。
grep Huge /proc/meminfo
公式:
HugePages = (SGA大小(MB) / Hugepagesize(MB)) + 余量
# 假设 SGA=8G,Hugepagesize=2MB
# HugePages = 8192 / 2 = 4096
vi /etc/sysctl.conf
vm.nr_hugepages = 4096
sysctl -p
vi /etc/security/limits.conf
oracle soft memlock unlimited
oracle hard memlock unlimited
# 尽量不让 Oracle 使用 swap
sysctl -w vm.swappiness=10
持久化:
vi /etc/sysctl.conf
vm.swappiness=10
vi /etc/sysctl.conf
kernel.shmmax = 物理内存一半(字节)
kernel.shmall = shmmax / PAGE_SIZE
kernel.shmmni = 4096
示例(64G 内存):
kernel.shmmax = 34359738368
kernel.shmall = 8388608
ALTER SYSTEM SET MEMORY_TARGET=8G SCOPE=SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET=8G SCOPE=SPFILE;
ALTER SYSTEM SET SGA_TARGET=6G SCOPE=SPFILE;
ALTER SYSTEM SET SGA_MAX_SIZE=6G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=2G SCOPE=SPFILE;
DB_CACHE_SIZE
SHARED_POOL_SIZE
LARGE_POOL_SIZE
JAVA_POOL_SIZE
经验:
SELECT * FROM v$pgastat;
关注:
over allocation countcache hit percentagefree -h
top
vmstat 2
sar -r 2
SELECT * FROM v$sga;
SELECT * FROM v$sgainfo;
SELECT * FROM v$pga_target_advice;
SELECT * FROM v$sga_target_advice;
@?/rdbms/admin/awrrpt.sql
关注:
✅ 使用 HugePages
✅ SGA 固定,不用 AMM
✅ swappiness 调低
✅ PGA 不要过小
✅ 避免 OOM Kill
✅ 监控 swap 使用
如果你能提供:
我可以给你一套可直接用的参数模板。