Debian 上 Oracle 内存管理调优指南
一 内存架构与总体策略
二 两种内存管理模式与适用场景
三 在 Debian 上的具体配置步骤
-- 备份参数
CREATE PFILE='/home/oracle/pfile.ora' FROM SPFILE;
-- 启用 AMM(0 表示关闭自动内存管理以便自定义)
ALTER SYSTEM SET MEMORY_TARGET=12G SCOPE=SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET=12G SCOPE=SPFILE;
-- 可选:若需固定 SGA/PGA 比例,可同时设置(AMM 下为上限)
ALTER SYSTEM SET SGA_TARGET=9G SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=2G SCOPE=SPFILE;
-- 重启生效
SHUTDOWN IMMEDIATE;
STARTUP;
CREATE PFILE='/home/oracle/pfile.ora' FROM SPFILE;
-- 关闭 AMM
ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE;
-- 配置 SGA
ALTER SYSTEM SET SGA_MAX_SIZE=9G SCOPE=SPFILE;
ALTER SYSTEM SET SGA_TARGET=9G SCOPE=SPFILE;
-- 配置 PGA
ALTER SYSTEM SET WORKAREA_SIZE_POLICY=AUTO SCOPE=SPFILE;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET=1G SCOPE=SPFILE;
-- 可选:为关键组件设下限(避免被自动策略缩到过小)
ALTER SYSTEM SET DB_CACHE_SIZE=2G SCOPE=SPFILE;
ALTER SYSTEM SET SHARED_POOL_SIZE=1G SCOPE=SPFILE;
ALTER SYSTEM SET JAVA_POOL_SIZE=128M SCOPE=SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
SHOW PARAMETER sga_target; SHOW PARAMETER pga; 验证。涉及 SGA_MAX_SIZE 的变更需重启实例。# /etc/sysctl.conf
kernel.shmmax = 17179869184 # 16GB,单位 Byte
kernel.shmall = 4194304 # 16GB/4KB
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
# 使配置生效
sysctl -p
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
SHOW PARAMETER use_large_pages 与 /proc/meminfo 的 HugePage 信息)。四 关键指标与调优阈值
SELECT 1 - (phy.value / (cur.value + con.value)) "HIT RATIO"
FROM v$sysstat cur, v$sysstat con, v$sysstat phy
WHERE cur.name = 'db block gets'
AND con.name = 'consistent gets'
AND phy.name = 'physical reads';
偏低时优先增大 DB_CACHE_SIZE(ASMM 下也可提高 SGA_TARGET)。SELECT 1 - (SUM(reloads)/SUM(pins)) "Library cache Hit Ratio"
FROM v$librarycache;
偏低时增大 SHARED_POOL_SIZE。SELECT 1 - (SUM(getmisses)/SUM(gets)) "Data Dictionary Hit Ratio"
FROM v$rowcache;
偏低时同样优先增大 SHARED_POOL_SIZE。SELECT (req.value * 5000) / entries.value "Ratio"
FROM v$sysstat req, v$sysstat entries
WHERE req.name = 'redo log space requests'
AND entries.name = 'redo entries';
偏高时增大 LOG_BUFFER。SELECT * FROM V$PGASTAT;
关注 over allocation count(>0 表示 PGA 不足,应提高 PGA_AGGREGATE_TARGET)与 cache hit percentage(越高越好)。五 常见场景与建议配比