首页主机资讯Linux下Oracle如何调优内存

Linux下Oracle如何调优内存

时间2025-11-17 16:14:04发布访客分类主机资讯浏览1154
导读:Linux下Oracle内存调优实操指南 一 内存架构与调优目标 明确内存边界:数据库可用内存应小于物理内存,需为操作系统、Page Cache、其他应用预留充足空间(经验上至少预留10%–20%)。Oracle内存由两部分构成: SG...

Linux下Oracle内存调优实操指南

一 内存架构与调优目标

  • 明确内存边界:数据库可用内存应小于物理内存,需为操作系统、Page Cache、其他应用预留充足空间(经验上至少预留10%–20%)。Oracle内存由两部分构成:
    • SGA(System Global Area):被所有进程共享,包含Database Buffer Cache、Shared Pool、Large Pool、Redo Log Buffer等。
    • PGA(Program Global Area):每个服务器进程私有,包含会话状态、游标、排序区、哈希区等。
  • 调优目标:让热点数据尽量留在Buffer Cache,减少物理I/O;让排序/哈希等算子尽量在内存中完成(避免multi-pass),提升响应时间与吞吐。

二 内存管理模式与关键参数

  • 三种常用模式与取舍
    • AMM(Automatic Memory Management):设置MEMORY_TARGET(动态可调)与MEMORY_MAX_TARGET(上限),Oracle自动在SGA与PGA间分配;简单但可能与HugePages不兼容,11g后可用。
    • ASMM(Automatic Shared Memory Management):设置SGA_TARGET(动态)与PGA_AGGREGATE_TARGET(动态),SGA内部组件由Oracle自动分配;常用且稳定。
    • 手动管理:分别设置DB_CACHE_SIZE、SHARED_POOL_SIZE、LARGE_POOL_SIZE、LOG_BUFFER等,精细但维护成本高。
  • 关键参数与建议
    • 启用自动PGA管理:设置PGA_AGGREGATE_TARGET(如1G–8G起步,视负载调整),并确认WORKAREA_SIZE_POLICY=AUTO;Oracle默认按SGA的约20%作为PGA工作区起点(最小10MB)。
    • 工作区目标:尽量让大多数工作区运行在Optimal> 90%(OLTP可追求≈100%),One-pass < 10%Multi-pass 避免
    • 使用V$PGASTAT、V$PGA_TARGET_ADVICE、V$SGA_TARGET_ADVICE、V$SGA_RESIZE_OPS等视图评估与诊断;在OEM中使用Memory Advisor进行可视化调优与容量建议。

三 Linux系统层面的优化

  • 启用HugePages(大页):减少页表开销、提升TLB命中率,对大SGA尤为明显。
    • 计算HugePages数量(示例):HugePages ≈ SGA_MAX_SIZE / HugePage大小(常见HugePage为2MB1GB)。
    • 配置步骤:在**/etc/sysctl.conf中设置vm.nr_hugepages=N**,执行sysctl -p;在**/etc/security/limits.conf为Oracle用户设置memlock软硬限制≥SGA大小;重启实例后通过/proc/meminfov$sgastat**校验。
  • 共享内存与内核参数(若使用SHM而非HugePages)
    • 建议kernel.shmmax ≥ SGA_MAX_SIZE,让SGA尽量位于单个共享内存段,减少段数量带来的管理开销。
    • 合理设置kernel.shmall(系统共享内存总页数)、kernel.shmmni(段数量上限)、fs.file-max(文件句柄上限)等,避免共享内存分配失败或资源受限。
  • 其他系统项
    • 选择XFS/ext4等合适文件系统,合理挂载选项;确保**透明大页(THP)**策略与数据库工作负载匹配(通常建议关闭或设置为madvise)。

四 调优步骤与常用SQL

  • 基线采集与诊断
    • 采集AWR/ADDM报告定位瓶颈(SQL、I/O、内存命中率等);在OEM中使用Memory Advisor获取SGA/PGA容量建议与历史趋势。
  • 设置内存管理模式与容量
    • 启用ASMM(示例):
      • 查看与调整:SHOW PARAMETER sga_target; SHOW PARAMETER pga_aggregate_target;
      • 动态设置:ALTER SYSTEM SET sga_target=4G SCOPE=BOTH; ALTER SYSTEM SET pga_aggregate_target=1G SCOPE=BOTH;
    • 启用AMM(示例,需重启):
      • ALTER SYSTEM SET memory_target=8G SCOPE=SPFILE;
      • ALTER SYSTEM SET memory_max_target=8G SCOPE=SPFILE;
      • 若需完全交由AMM管理,可将SGA_TARGETPGA_AGGREGATE_TARGET设为0
  • 监控与验证
    • PGA:
      • SELECT name, value FROM v$pgastat WHERE name=‘aggregate PGA target parameter’;
      • SELECT * FROM v$pga_target_advice ORDER BY pga_target_factor;
    • SGA:
      • SELECT * FROM v$sga_target_advice ORDER BY sga_size_factor;
      • SELECT component, current_size, target_size FROM v$sga_dynamic_components;
    • 观察命中率与溢出:确保PGA工作区以Optimal为主,减少One-pass/Multi-pass;SGA命中率(如Buffer Cache命中)趋稳并符合业务目标。

五 典型场景与注意事项

  • OLTP高并发短事务
    • 高Buffer Cache命中率低PGA溢出为目标;PGA以Optimal为主,适度提高SGA_TARGET;必要时启用HugePages降低系统开销。
  • DSS/报表与大量排序/哈希
    • 适度提高PGA_AGGREGATE_TARGET,关注V$PGA_TARGET_ADVICEV$PGASTAT中的溢出指标;避免Multi-pass导致响应时间急剧上升。
  • 使用共享服务器模式
    • UGA位于SGA的Large Pool中,需确保Large Pool配置合理,避免UGA竞争影响会话稳定性。
  • 常见错误与快速排查
    • ORA-27123 unable to attach to shared memory segment:多为SHMMAX过小或HugePages配置不当;增大SHMMAX或正确配置HugePages后重启实例。
    • 修改SGA_MAX_SIZE通常需要重启实例;在ASMM下调整Total SGA Size可通过OEM Memory Advisor在线完成,但上限受SGA_MAX_SIZE约束。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux下Oracle如何调优内存
本文地址: https://pptw.com/jishu/749046.html
如何在Linux上优化Oracle查询 Oracle在Linux上如何管理用户

游客 回复需填写必要信息