温馨提示×

怎样优化Ubuntu Oracle内存使用

小樊
34
2025-12-28 12:27:07
栏目: 云计算

Ubuntu 上 Oracle 内存优化实操指南

一 基线评估与总体策略

  • 明确物理内存与用途:用 free -h 查看可用内存,保留**20%–30%**给操作系统、监控、网络与突发负载,避免数据库把内存吃满。
  • 内存分配比例(经验值):SGA 30%–70%PGA 5%–25%,总和不宜超过物理内存的80%,以降低 swap 与抖动风险。
  • 选择内存管理模式:
    • AMM(Automatic Memory Management):用 memory_target 统一管理 SGA+PGA,适合新手与稳态业务。
    • ASMM(Automatic Shared Memory Management):设置 sga_targetpga_aggregate_target,SGA 内部自动调优,适合需要一定可控性的场景。
    • 手动模式:精细到组件,适合复杂或特殊负载。
  • 监控工具:系统侧用 free -h、top/htop、vmstat 1 10;数据库侧用 V$SGAINFO、V$PGA_AGGREGATE_TARGET_ADVICE、V$MEMORY_DYNAMIC_COMPONENTS,必要时结合 AWR/ASH 报告定位瓶颈。

二 操作系统层面优化

  • 共享内存与信号量(Oracle 必需):编辑 /etc/sysctl.conf,示例(按实际内存调整):
    • kernel.shmall = 2097152(共享内存总页数,4KB/页)
    • kernel.shmmax = 17179869184(单个共享内存段上限,约 16GB)
    • kernel.shmmni = 4096
    • kernel.sem = 250 32000 100 128
      执行 sudo sysctl -p 生效。
  • 降低换页倾向:设置 vm.swappiness=10(范围 0–100,值越小越少用 swap;某些场景会用 0,但数据库更推荐 10 以保留应急弹性)。
  • 文件句柄与进程数:在 /etc/security/limits.conf 增加
    • oracle soft/hard nofile 1024/65536
    • oracle soft/hard nproc 2047/16384
  • 异步 I/O:设置 vm.aio-max-nr=1048576,提升高并发 I/O 场景性能。
  • 透明大页(THP):建议关闭以避免内存碎片与性能抖动:
    • echo “never” | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
    • echo “never” | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
  • 虚拟内存映射上限:提高 vm.max_map_count=262144,降低出现 ORA-4030 的风险。
  • 大页内存(HugePages,推荐用于大 SGA):
    • 检查:grep -E ‘hugepages|Hugepagesize’ /proc/meminfo
    • 计算:HugePages ≈ SGA 大小 / HugePageSize(常见 HugePageSize 为 2MB
    • 配置:在 /etc/sysctl.conf 设置 vm.nr_hugepages=目标页数,并配置 vm.hugetlb_shm_group 为 Oracle 用户组 GID,重启数据库后生效。

三 Oracle 数据库内存参数配置

  • AMM(统一内存管理,推荐):
    • ALTER SYSTEM SET memory_target=16G SCOPE=SPFILE;
    • ALTER SYSTEM SET memory_max_target=32G SCOPE=SPFILE;
    • ALTER SYSTEM SET sga_target=0 SCOPE=SPFILE;
    • ALTER SYSTEM SET pga_aggregate_target=0 SCOPE=SPFILE;
    • 重启数据库生效。
  • ASMM(SGA 自动、PGA 手动):
    • ALTER SYSTEM SET sga_target=8G SCOPE=SPFILE;
    • ALTER SYSTEM SET sga_max_size=8G SCOPE=SPFILE;
    • ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=SPFILE;
    • 可选:为关键组件设初值(ASMM 可自调)如 shared_pool_size、db_cache_size
  • 手动模式(精细控制):
    • ALTER SYSTEM SET db_cache_size=4G SCOPE=SPFILE;
    • ALTER SYSTEM SET shared_pool_size=2G SCOPE=SPFILE;
    • ALTER SYSTEM SET large_pool_size=200M SCOPE=SPFILE;
    • ALTER SYSTEM SET java_pool_size=200M SCOPE=SPFILE;
    • PGA 子项如 sort_area_size、hash_area_size 视需要设置。
  • 组件占比建议:db_cache_size 50%–60%shared_pool_size 15%–30%log_buffer 16M–64M

四 验证与监控

  • 参数与状态:
    • SHOW PARAMETER target / sga_target / pga_aggregate_target
    • SELECT * FROM V$SGAINFO;
    • SELECT * FROM V$PGA_AGGREGATE_TARGET_ADVICE;
    • SELECT * FROM V$MEMORY_DYNAMIC_COMPONENTS;
  • 系统侧:
    • free -h、top/htop、vmstat 1 10(关注 si/so 是否频繁)
  • 工作负载分析:生成 AWR/ASH 报告,识别共享池命中率、缓冲区命中率、PGA 排序/哈希瓶颈。

五 注意事项与常见坑

  • 避免过度分配:SGA+PGA ≤ 物理内存 80%;AMM/ASMM 上限也要受此约束。
  • 大页与 AMM 的取舍:启用 HugePages 时,部分 Oracle 版本与平台组合下建议关闭 AMM(memory_target),优先使用 ASMM 以获得更稳定的大页收益;变更前务必在测试环境验证。
  • THP 与 swap:关闭 THP、合理设置 vm.swappiness(数据库更推荐 10),减少抖动与性能劣化。
  • 变更流程:参数修改写入 SPFILE 后需重启;先备份 SPFILE 与当前参数,按“小步调整、持续观测”的节奏推进。
  • SQL 与应用层优化:使用绑定变量降低硬解析,减少共享池压力;优化执行计划、索引与访问路径,降低 PGA 排序/哈希开销。

0