- 首页 >
- 问答 >
-
云计算 >
- CentOS Oracle内存管理技巧
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/enabled 与 defrag 写入 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=64GB、2MB 大页:Pages = 64×1024/2 + 100 = 32868。
- 写入 /etc/sysctl.conf:vm.nr_hugepages=32868,执行 sysctl -p 生效。
- 关闭 AMM 并切换到 ASMM
- 将 MEMORY_TARGET=0、MEMORY_MAX_TARGET=0,设置 SGA_TARGET 与 PGA_AGGREGATE_TARGET,必要时重启实例生效。
- 验证
- 观察 /proc/meminfo 的 HugePages_Total/Free/Rsvd;检查 alert.log 的 “Large Pages Information” 段,确认 SGA 已落入大页。
- 常见坑
- 若 HugePages 不足,实例可能启动失败或 SGA 未完全使用大页;若 memlock 过小,SGA 可能被换出;若未关闭 THP,可能出现大页与透明大页混用导致的性能抖动。
三 关键内核与共享内存参数
- 共享内存总量(确保能容纳最大 SGA)
- 计算:kernel.shmall = ceil(SGA_MAX / PAGE_SIZE)。例如 SGA_MAX=60GB、PAGE_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 组件 之间平衡;PGA 由 workarea_size_policy=AUTO 自动管理,结合负载变化逐步微调 SGA_TARGET/PGA_AGGREGATE_TARGET。