首页主机资讯Linux Oracle内存优化技巧

Linux Oracle内存优化技巧

时间2025-11-25 18:20:04发布访客分类主机资讯浏览471
导读:Linux 上 Oracle 内存优化实用指南 一 内存架构与容量规划 明确内存边界:SGA 为实例内共享内存,包含 Database Buffer Cache、Shared Pool、Redo Log Buffer、Large Pool...

Linux 上 Oracle 内存优化实用指南

一 内存架构与容量规划

  • 明确内存边界:SGA 为实例内共享内存,包含 Database Buffer Cache、Shared Pool、Redo Log Buffer、Large Pool 等;PGA 为每个进程私有内存,包含 Session/UGA、Sort Area、Hash Area 等。专用服务器模式下 UGA 位于 PGA,共享服务器模式下 UGA 位于 Large Pool。优先保证系统预留 约 20% 物理内存 给 OS 与其他进程,避免内存争用与抖动。容量初配可按负载类型划分:
    • OLTP:SGA 约占可用内存的 80%,PGA 约占 20%
    • DSS/OLAP:PGA 可提升至 50%–70%(视并发与排序/哈希工作负载而定)。上线后用 V$SGA_TARGET_ADVICE、V$PGA_TARGET_ADVICE 做二次校准。

二 Oracle 层内存参数配置

  • 自动内存管理(AMM):启用 MEMORY_TARGET/MEMORY_MAX_TARGET 后,Oracle 自动在 SGA 与 PGA 间分配内存;注意 MEMORY_TARGET 不可超过 /dev/shm 大小,否则实例启动报 ORA-00845。若需使用 AMM,确保挂载的 tmpfs /dev/shm 足够大。
  • 自动共享内存管理(ASMM):设置 SGA_TARGET(动态可调),Oracle 在 DB_CACHE_SIZE、SHARED_POOL_SIZE、LARGE_POOL_SIZE 等组件间自动调优;SGA_MAX_SIZE 为上限,修改需重启。
  • 手动管理:显式设置各组件(如 DB_CACHE_SIZE、SHARED_POOL_SIZE),并将 SGA_TARGET=0
  • PGA 自动管理:设置 WORKAREA_SIZE_POLICY=AUTOPGA_AGGREGATE_TARGET(动态可调),Oracle 自动为排序/哈希等操作分配工作区。
  • 常用命令范式:
    • 查看:SHOW PARAMETER memory_target; sga_target; pga_aggregate_target;
    • AMM:ALTER SYSTEM SET MEMORY_TARGET=24G SCOPE=BOTH; (确保 /dev/shm ≥ 24G)
    • ASMM:ALTER SYSTEM SET SGA_TARGET=16G SCOPE=BOTH;
    • 手动组件:ALTER SYSTEM SET DB_CACHE_SIZE=8G SCOPE=BOTH;
    • PGA:ALTER SYSTEM SET WORKAREA_SIZE_POLICY=AUTO SCOPE=BOTH; ALTER SYSTEM SET PGA_AGGREGATE_TARGET=4G SCOPE=BOTH;
      注:修改 SGA_MAX_SIZE 通常需 SCOPE=SPFILE 并重启;使用 AMM 时 SGA_TARGET/PGA_AGGREGATE_TARGET 之和不应大于 MEMORY_TARGET

三 Linux 层关键优化

  • 启用 HugePages:减少 TLB Miss 与页表开销,提升大 SGA 场景稳定性与性能。规划步骤:
    1. 若使用 AMM(MEMORY_TARGET),建议先关闭(将 MEMORY_TARGET/MEMORY_MAX_TARGET 置 0),改用 ASMM 或手动
    2. 使用 Oracle 提供的 hugepages_settings.sh 脚本(MOS 401749.1)计算所需 HugePages;
    3. /etc/sysctl.conf 设置 vm.nr_hugepages=< 计算值> ,执行 sysctl -p 生效;
    4. 重启数据库验证 HugePages 分配与使用。
  • 合理设置 /dev/shm:AMM 依赖 tmpfs /dev/shm,需保证其容量 ≥ MEMORY_TARGET;必要时调整挂载选项(如 size=...)。
  • 内核与资源参数:结合负载设置 fs.file-max、kernel.shmall、kernel.shmmax 等,避免共享内存与文件句柄瓶颈。
  • 内存回收策略:适度降低 vm.swappiness,减少不必要的换页,优先保障数据库工作集常驻内存。

四 监控与诊断要点

  • Oracle 动态视图:
    • SGA:V$SGASTAT 观察各组件命中与分配;V$SGA_TARGET_ADVICE 评估 SGA 目标值调整收益。
    • PGA:V$PGASTAT 查看 aggregate PGA target parameter、aggregate PGA auto target、over allocation count、cache hit percentage 等关键指标;V$PGA_TARGET_ADVICE 评估 PGA 目标值。
    • 命中率参考:Buffer Cache 命中率建议不低于 90%;Library Cache 命中率建议不低于 90%;Redo Log Buffer 的 redo log space requests 应接近 0
  • 操作系统工具:free -g、top、vmstat、sar 观察可用内存、换页、系统负载;检查 /dev/shm 使用与 HugePages 分配。
  • 周期性报告:利用 AWR/ADDM 定位内存相关瓶颈(如 shared pool 抖动、direct path read、PGA 过度分配等),并据此微调目标值。

五 常见陷阱与规避

  • 过度分配导致换页或 OOM:SGA+PGA 过大、连接数高时,进程页表与 OS 内存压力激增;经验上建议将 SGA+PGA 控制在物理内存的约 50% 以内,并控制 PGA 不超过 SGA 的约 20%(视业务而定)。
  • 启用 AMM 却未调整 /dev/shm:易出现 ORA-00845;需确保 /dev/shm ≥ MEMORY_TARGET
  • 使用 AMM 同时强依赖 HugePages:二者在部分版本/配置下存在兼容性与锁定策略差异,通常建议 HugePages 配合 ASMM/手动 使用。
  • 仅增大 SGA 忽略 SQL 与访问路径:硬解析、缺失索引、全表扫描会抵消内存收益;应并行推进 SQL 优化、索引/分区、统计信息 等。

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


若转载请注明出处: Linux Oracle内存优化技巧
本文地址: https://pptw.com/jishu/755794.html
如何在Ubuntu顺利安装Python Ubuntu系统如何安装Python

游客 回复需填写必要信息