温馨提示×

CentOS Oracle内存管理技巧

小樊
35
2025-12-31 03:54:26
栏目: 云计算

CentOS 上 Oracle 内存管理实用技巧

一 模式选择与取舍

  • Linux + Oracle 环境中,优先选择 ASMM(SGA 自动共享内存)+ 自动 PGA,避免使用 AMM(MEMORY_TARGET/MEMORY_MAX_TARGET),因为 AMM 依赖 /dev/shm,与 HugePages 不兼容,无法享受大页带来的性能与稳定性收益。启用 AMM 时,若 /dev/shm 容量不足,会遇到 ORA-00845;并且 AMM 与 HugePages 冲突,生产环境建议关闭 AMM 改用 ASMM。若计划使用 HugePages,务必关闭 Transparent HugePages(THP),以免与 Oracle 的大页分配策略产生冲突与抖动。

二 启用 HugePages 的正确步骤

  • 关闭 THP(两种方式其一,建议写入启动项保证持久化)
    • 内核启动参数:编辑 /etc/default/grub,在 GRUB_CMDLINE_LINUX 增加 transparent_hugepage=never,执行 grub2-mkconfig -o /boot/grub2/grub.cfg 后重启。
    • 运行时关闭:在 /sys/kernel/mm/transparent_hugepage/enableddefrag 写入 never,并确保 /etc/rc.d/rc.local 可执行以持久化。
  • 配置 Oracle 用户内存锁定(memlock)
    • 编辑 /etc/security/limits.conf:oracle soft/hard memlock 设置为“略小于物理内存(单位 KB)”,保证 SGA 可被锁定进物理内存,避免换出。
  • 计算并设置 HugePages
    • 估算公式:HugePages ≈ SGA(MB) / HugePage_size(MB) + 预留(如 100)。例如 SGA=64GB2MB 大页:Pages = 64×1024/2 + 100 = 32868
    • 写入 /etc/sysctl.confvm.nr_hugepages=32868,执行 sysctl -p 生效。
  • 关闭 AMM 并切换到 ASMM
    • MEMORY_TARGET=0、MEMORY_MAX_TARGET=0,设置 SGA_TARGETPGA_AGGREGATE_TARGET,必要时重启实例生效。
  • 验证
    • 观察 /proc/meminfoHugePages_Total/Free/Rsvd;检查 alert.log 的 “Large Pages Information” 段,确认 SGA 已落入大页。
  • 常见坑
    • HugePages 不足,实例可能启动失败或 SGA 未完全使用大页;若 memlock 过小,SGA 可能被换出;若未关闭 THP,可能出现大页与透明大页混用导致的性能抖动。

三 关键内核与共享内存参数

  • 共享内存总量(确保能容纳最大 SGA)
    • 计算:kernel.shmall = ceil(SGA_MAX / PAGE_SIZE)。例如 SGA_MAX=60GBPAGE_SIZE=4KB,则 shmall ≈ 60×1024×1024/4 = 15728640。设置 /etc/sysctl.conf 并执行 sysctl -p
  • 其他常用内核参数(按实际负载微调)
    • 文件句柄与 AIO:fs.file-max、fs.aio-max-nr
    • 信号量与共享内存:kernel.sem、kernel.shmmni
    • 网络与端口:net.core.rmem_default/wmem_default、net.core.rmem_max/wmem_max、net.ipv4.ip_local_port_range
  • 说明
    • 这些参数确保 Oracle 在 System V IPC/共享内存网络 I/O 层面具备足够的资源与合适的队列/缓存策略,避免因系统限制导致的内存与连接瓶颈。

四 SGA 与 PGA 的分配与监控

  • 分配原则
    • 经验上 SGA 约占 OS 内存的 1/3~1/2,并满足 OS + SGA + PGA < 物理内存;OLTP 通常 SGA 占比更高,OLAP 可适当提高 PGA 以容纳排序/哈希操作。
  • 快速示例(ASMM + 自动 PGA)
    • 设置:SGA_TARGET=32G、PGA_AGGREGATE_TARGET=8G、WORKAREA_SIZE_POLICY=AUTO;重启后验证参数生效。
  • 监控与诊断
    • 命中率与使用情况:
      • SGA:查询 V$SGAINFO、V$SYSSTAT(如计算 Buffer Cache Hit Ratio)。
      • PGA:查询 V$PGASTAT(如 aggregate PGA target parameter、aggregate PGA auto target、cache hit percentage)。
    • 性能报告:定期生成 AWR/ADDM,定位内存相关的等待与瓶颈(如 direct path read/write、library cache 等)。
  • 动态调优
    • ASMM 下,Oracle 会自动在 SGA 组件 之间平衡;PGAworkarea_size_policy=AUTO 自动管理,结合负载变化逐步微调 SGA_TARGET/PGA_AGGREGATE_TARGET

0