Debian中Oracle内存管理怎样调优
导读:Debian 上 Oracle 内存管理调优指南 一 内存架构与总体策略 Oracle 实例内存由两部分构成:SGA(System Global Area)与PGA(Program Global Area)。SGA 为所有进程共享,包含共...
Debian 上 Oracle 内存管理调优指南
一 内存架构与总体策略
- Oracle 实例内存由两部分构成:SGA(System Global Area)与PGA(Program Global Area)。SGA 为所有进程共享,包含共享池、数据库缓冲区缓存、重做日志缓冲区、Java 池、大型池等;PGA 为每个会话/进程私有,主要承载排序、哈希、位图合并等工作区。总体约束为:SGA + PGA + OS 使用内存 < 物理内存,避免系统换页与抖动。调优目标是在满足业务吞吐的同时,尽量提升缓存命中、降低物理 I/O 与工作区溢出。
二 两种内存管理模式与适用场景
- 自动内存管理(AMM):设置MEMORY_TARGET(可选上限MEMORY_MAX_TARGET),Oracle 在 SGA 与 PGA 之间自动分配与回收。优点是简单、自适应;但在某些负载/版本下可能出现内存回收抖动,且对大页 HugePages支持受限。适用于希望快速获得稳定表现的通用场景。
- 自动共享内存管理 + 自动 PGA(ASMM + PGA 自动):设置SGA_TARGET(上限SGA_MAX_SIZE)并启用WORKAREA_SIZE_POLICY=AUTO与PGA_AGGREGATE_TARGET,SGA 内部由 Oracle 自动在组件间分配,PGA 由工作区策略自动管理。优点是可控性更强、对大页更友好,适合生产环境稳态调优。
三 在 Debian 上的具体配置步骤
-
- 设定内存目标(二选一)
- AMM(示例:总内存 16G,给 Oracle 约 12.8G,其中 SGA 约 9G、PGA 约 2G)
-- 备份参数 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; - ASMM + PGA 自动(示例:SGA 9G、PGA 1G)
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 的变更需重启实例。
-
- 操作系统与内核参数(Debian 通用)
- 共享内存与信号量(示例:16G 内存)
# /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 - 资源限制(/etc/security/limits.conf)
oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 - 说明:SHMMAX/SHMALL 需与 SGA 大小匹配;大页(HugePages)可显著降低 TLB 开销,启用方法视内核与 Oracle 版本而定(检查
SHOW PARAMETER use_large_pages与/proc/meminfo的 HugePage 信息)。
四 关键指标与调优阈值
- 缓冲区命中率(Buffer Cache Hit Ratio):应**>
90%**。计算与判断:
偏低时优先增大 DB_CACHE_SIZE(ASMM 下也可提高 SGA_TARGET)。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'; - 共享池命中率(Library Cache Hit Ratio):应**>
99%**。计算与判断:
偏低时增大 SHARED_POOL_SIZE。SELECT 1 - (SUM(reloads)/SUM(pins)) "Library cache Hit Ratio" FROM v$librarycache; - 数据字典命中率(Dictionary Cache Hit Ratio):应**>
95%**。计算与判断:
偏低时同样优先增大 SHARED_POOL_SIZE。SELECT 1 - (SUM(getmisses)/SUM(gets)) "Data Dictionary Hit Ratio" FROM v$rowcache; - 重做日志缓冲区(Log Buffer):建议 redo log space requests / redo entries <
1%。计算与判断:
偏高时增大 LOG_BUFFER。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'; - PGA 工作区与溢出监控:
关注 over allocation count(> 0 表示 PGA 不足,应提高 PGA_AGGREGATE_TARGET)与 cache hit percentage(越高越好)。SELECT * FROM V$PGASTAT;
五 常见场景与建议配比
- 通用稳态(ASMM):SGA_TARGET ≈ 物理内存的 30%–70%;PGA_AGGREGATE_TARGET ≈ 5%–25%;两者合计建议不超过**80%**的物理内存。组件参考:DB_CACHE_SIZE ≈ SGA 的 20%、SHARED_POOL_SIZE ≈ SGA 的 10%(可按负载微调)。
- OLTP 倾向:PGA ≈ (总内存×80%)×20%;SGA ≈ 余下大部分(如约 60%),以高并发短事务与缓存命中为目标。
- DSS/OLAP 倾向:PGA ≈ (总内存×80%)×50%;SGA ≈ 余下大部分,以大排序/哈希与并行查询为目标。
- 经验法则:在纯数据库服务器上,常预留约 20% 物理内存给 OS,其余再在 SGA 与 PGA 之间分配,并持续以 AWR/ADDM 与命中率指标校准。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian中Oracle内存管理怎样调优
本文地址: https://pptw.com/jishu/758328.html
