- 首页 >
- 问答 >
-
云计算 >
- Linux环境下Oracle如何管理内存
Linux环境下Oracle如何管理内存
小樊
31
2025-11-30 18:27:00
Linux环境下 Oracle 内存管理实战指南
一 内存架构与总体策略
- Oracle 在 Linux 上的内存由两部分构成:
- SGA(System Global Area):实例共享内存,包含 Database Buffer Cache、Shared Pool、Large Pool、Java Pool、Streams Pool 等。
- PGA(Program Global Area):每个服务器进程私有内存,包含会话状态、排序区、哈希区等。
- 内存管理方式通常分为三层:
- 自动内存管理 AMM:设置 MEMORY_TARGET / MEMORY_MAX_TARGET,由实例在 SGA+PGA 间自动分配与回收;
- 自动共享内存管理 ASMM:设置 SGA_TARGET(配合 SGA_MAX_SIZE),SGA 内部组件自动调优;
- 手动管理:为各组件设定固定大小(如 DB_CACHE_SIZE、SHARED_POOL_SIZE、LARGE_POOL_SIZE 等)。
- 常见取舍:AMM 简单但灵活性略低;ASMM 在 SGA 内更灵活;手动管理适合对关键组件有明确需求的场景。启用 ASMM 需 STATISTICS_LEVEL=TYPICAL/ALL 且 SGA_TARGET>0。
二 容量规划与初始分配建议
- 预留原则:建议为 操作系统与其他进程预留约 20% 物理内存,其余 80% 供数据库使用。
- 初始配比(经验值,需结合压测校准):
- OLTP:SGA 约占可用内存的 80%,PGA 约占 20%;
- DSS/OLAP:SGA 与 PGA 各约占 50%。
- 计算公式(以总物理内存为 M):
- OLTP:SGA_TARGET ≈ (M × 0.8) × 0.8;PGA_AGGREGATE_TARGET ≈ (M × 0.8) × 0.2
- DSS:SGA_TARGET ≈ (M × 0.8) × 0.5;PGA_AGGREGATE_TARGET ≈ (M × 0.8) × 0.5
- 上线后依据负载用 Oracle 建议视图校准:
- SGA 参考 V$SGA_TARGET_ADVICE;PGA 参考 V$PGA_TARGET_ADVICE。
三 常用配置命令与生效范围
- 自动内存管理(AMM)
- 启用/调整:ALTER SYSTEM SET MEMORY_TARGET=xxG, MEMORY_MAX_TARGET=yyG SCOPE=BOTH;
- 自动共享内存管理(ASMM)
- 启用:ALTER SYSTEM SET SGA_TARGET=xxG SCOPE=BOTH;(需 STATISTICS_LEVEL=TYPICAL/ALL)
- 上限:ALTER SYSTEM SET SGA_MAX_SIZE=yyG SCOPE=SPFILE;(重启生效)
- 关闭:ALTER SYSTEM SET SGA_TARGET=0;(动态生效,转为手动)
- 手动指定关键组件(示例)
- ALTER SYSTEM SET DB_CACHE_SIZE=xxG SCOPE=SPFILE;
- ALTER SYSTEM SET SHARED_POOL_SIZE=yyG SCOPE=SPFILE;
- ALTER SYSTEM SET LARGE_POOL_SIZE=zzG SCOPE=SPFILE;
- PGA 自动管理
- 启用:ALTER SYSTEM SET WORKAREA_SIZE_POLICY=AUTO SCOPE=BOTH;
- 目标:ALTER SYSTEM SET PGA_AGGREGATE_TARGET=xxG SCOPE=BOTH;
- 生效范围要点:SCOPE=BOTH 动态生效(当前实例),SCOPE=SPFILE 需重启;SGA_MAX_SIZE 通常需重启。
四 Linux 系统层面的关键配置
- 启用 HugePages(大页)以减少页表开销、提升大内存访问效率:
- 计算并配置 vm.nr_hugepages,执行
sysctl -p 使配置生效;
- 结合 Oracle 启动日志与系统工具验证 HugePages 分配与使用。
- 共享内存内核参数(传统 SHM 场景):
- 合理设置 kernel.shmmax、kernel.shmall、kernel.shmmni;
- 典型计算:
- shmmax ≈ 物理内存字节数 / 2 - 1(确保单个段可容纳整个 SGA);
- shmall = 物理内存字节数 / 页大小(页大小可用
getconf PAGESIZE 获取)。
- 参数过小常引发 ORA-27102: out of memory / No space left on device 等错误。
- 其他:按需调整 fs.file-max 等文件句柄上限,避免资源受限。
五 监控与常见排错
- 监控与诊断
- Oracle 层:AWR/ADDM 报告定位内存瓶颈;动态视图 V$SGA_TARGET_ADVICE、V$PGA_TARGET_ADVICE 指导容量微调;
- 系统层:结合 free、top 等观察系统可用内存、页换入换出与 CPU 负载。
- 常见问题与处理
- 启动报错 ORA-27102:优先核查 shmmax/shmall 是否足够,必要时增大后重试;
- 内存不足报错 ORA-4030:检查 PGA_AGGREGATE_TARGET 与 workarea_size_policy,降低 PGA 目标或优化排序/哈希等内存密集操作;
- 调整顺序建议:先定总量策略(AMM/ASMM/手动)→ 校准 SGA 与 PGA → 校核组件下限与关键业务 SQL → 回归 AWR/ADDM 复核。