首页主机资讯Debian中Oracle内存管理怎样调优

Debian中Oracle内存管理怎样调优

时间2025-11-27 21:46:04发布访客分类主机资讯浏览1001
导读:Debian 上 Oracle 内存管理调优指南 一 内存架构与总体策略 Oracle 实例内存由两部分构成:SGA(System Global Area)与PGA(Program Global Area)。SGA 为所有进程共享,包含共...

Debian 上 Oracle 内存管理调优指南

一 内存架构与总体策略

  • Oracle 实例内存由两部分构成:SGA(System Global Area)PGA(Program Global Area)。SGA 为所有进程共享,包含共享池、数据库缓冲区缓存、重做日志缓冲区、Java 池、大型池等;PGA 为每个会话/进程私有,主要承载排序、哈希、位图合并等工作区。总体约束为:SGA + PGA + OS 使用内存 < 物理内存,避免系统换页与抖动。调优目标是在满足业务吞吐的同时,尽量提升缓存命中、降低物理 I/O 与工作区溢出。

二 两种内存管理模式与适用场景

  • 自动内存管理(AMM):设置MEMORY_TARGET(可选上限MEMORY_MAX_TARGET),Oracle 在 SGA 与 PGA 之间自动分配与回收。优点是简单、自适应;但在某些负载/版本下可能出现内存回收抖动,且对大页 HugePages支持受限。适用于希望快速获得稳定表现的通用场景。
  • 自动共享内存管理 + 自动 PGA(ASMM + PGA 自动):设置SGA_TARGET(上限SGA_MAX_SIZE)并启用WORKAREA_SIZE_POLICY=AUTOPGA_AGGREGATE_TARGET,SGA 内部由 Oracle 自动在组件间分配,PGA 由工作区策略自动管理。优点是可控性更强、对大页更友好,适合生产环境稳态调优。

三 在 Debian 上的具体配置步骤

    1. 设定内存目标(二选一)
    • AMM(示例:总内存 16G,给 Oracle 约 12.8G,其中 SGA 约 9G、PGA 约 2G)
      -- 备份参数
      CREATE PFILE='/home/oracle/pfile.ora' FROM SPFILE;
          
      
      -- 启用 AMM(0 表示关闭自动内存管理以便自定义)
      ALTER SYSTEM SET MEMORY_TARGET=12G SCOPE=SPFILE;
          
      ALTER SYSTEM SET MEMORY_MAX_TARGET=12G SCOPE=SPFILE;
          
      
      -- 可选:若需固定 SGA/PGA 比例,可同时设置(AMM 下为上限)
      ALTER SYSTEM SET SGA_TARGET=9G SCOPE=SPFILE;
          
      ALTER SYSTEM SET PGA_AGGREGATE_TARGET=2G SCOPE=SPFILE;
          
      
      -- 重启生效
      SHUTDOWN IMMEDIATE;
          
      STARTUP;
          
      
    • ASMM + PGA 自动(示例:SGA 9G、PGA 1G)
      CREATE PFILE='/home/oracle/pfile.ora' FROM SPFILE;
          
      
      -- 关闭 AMM
      ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE;
          
      
      -- 配置 SGA
      ALTER SYSTEM SET SGA_MAX_SIZE=9G SCOPE=SPFILE;
          
      ALTER SYSTEM SET SGA_TARGET=9G SCOPE=SPFILE;
          
      
      -- 配置 PGA
      ALTER SYSTEM SET WORKAREA_SIZE_POLICY=AUTO SCOPE=SPFILE;
          
      ALTER SYSTEM SET PGA_AGGREGATE_TARGET=1G SCOPE=SPFILE;
          
      
      -- 可选:为关键组件设下限(避免被自动策略缩到过小)
      ALTER SYSTEM SET DB_CACHE_SIZE=2G SCOPE=SPFILE;
          
      ALTER SYSTEM SET SHARED_POOL_SIZE=1G SCOPE=SPFILE;
          
      ALTER SYSTEM SET JAVA_POOL_SIZE=128M SCOPE=SPFILE;
          
      
      SHUTDOWN IMMEDIATE;
          
      STARTUP;
          
      
    • 修改后可用 SHOW PARAMETER sga_target; SHOW PARAMETER pga; 验证。涉及 SGA_MAX_SIZE 的变更需重启实例。
    1. 操作系统与内核参数(Debian 通用)
    • 共享内存与信号量(示例:16G 内存)
      # /etc/sysctl.conf
      kernel.shmmax = 17179869184     # 16GB,单位 Byte
      kernel.shmall = 4194304         # 16GB/4KB
      kernel.shmmni = 4096
      kernel.sem   = 250 32000 100 128
      fs.file-max  = 65536
      net.ipv4.ip_local_port_range = 1024 65000
      
      # 使配置生效
      sysctl -p
      
    • 资源限制(/etc/security/limits.conf)
      oracle soft nproc  2047
      oracle hard nproc  16384
      oracle soft nofile 1024
      oracle hard nofile 65536
      
    • 说明:SHMMAX/SHMALL 需与 SGA 大小匹配;大页(HugePages)可显著降低 TLB 开销,启用方法视内核与 Oracle 版本而定(检查 SHOW PARAMETER use_large_pages/proc/meminfo 的 HugePage 信息)。

四 关键指标与调优阈值

  • 缓冲区命中率(Buffer Cache Hit Ratio):应**> 90%**。计算与判断:
    SELECT 1 - (phy.value / (cur.value + con.value)) "HIT RATIO"
    FROM v$sysstat cur, v$sysstat con, v$sysstat phy
    WHERE cur.name = 'db block gets'
      AND con.name = 'consistent gets'
      AND phy.name = 'physical reads';
        
    
    偏低时优先增大 DB_CACHE_SIZE(ASMM 下也可提高 SGA_TARGET)。
  • 共享池命中率(Library Cache Hit Ratio):应**> 99%**。计算与判断:
    SELECT 1 - (SUM(reloads)/SUM(pins)) "Library cache Hit Ratio"
    FROM v$librarycache;
        
    
    偏低时增大 SHARED_POOL_SIZE
  • 数据字典命中率(Dictionary Cache Hit Ratio):应**> 95%**。计算与判断:
    SELECT 1 - (SUM(getmisses)/SUM(gets)) "Data Dictionary Hit Ratio"
    FROM v$rowcache;
        
    
    偏低时同样优先增大 SHARED_POOL_SIZE
  • 重做日志缓冲区(Log Buffer):建议 redo log space requests / redo entries < 1%。计算与判断:
    SELECT (req.value * 5000) / entries.value "Ratio"
    FROM v$sysstat req, v$sysstat entries
    WHERE req.name = 'redo log space requests'
      AND entries.name = 'redo entries';
        
    
    偏高时增大 LOG_BUFFER
  • PGA 工作区与溢出监控:
    SELECT * FROM V$PGASTAT;
        
    
    关注 over allocation count(> 0 表示 PGA 不足,应提高 PGA_AGGREGATE_TARGET)与 cache hit percentage(越高越好)。

五 常见场景与建议配比

  • 通用稳态(ASMM):SGA_TARGET ≈ 物理内存的 30%–70%PGA_AGGREGATE_TARGET ≈ 5%–25%;两者合计建议不超过**80%**的物理内存。组件参考:DB_CACHE_SIZE ≈ SGA 的 20%SHARED_POOL_SIZE ≈ SGA 的 10%(可按负载微调)。
  • OLTP 倾向:PGA ≈ (总内存×80%)×20%SGA ≈ 余下大部分(如约 60%),以高并发短事务与缓存命中为目标。
  • DSS/OLAP 倾向:PGA ≈ (总内存×80%)×50%SGA ≈ 余下大部分,以大排序/哈希与并行查询为目标。
  • 经验法则:在纯数据库服务器上,常预留约 20% 物理内存给 OS,其余再在 SGA 与 PGA 之间分配,并持续以 AWR/ADDM 与命中率指标校准。

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


若转载请注明出处: Debian中Oracle内存管理怎样调优
本文地址: https://pptw.com/jishu/758328.html
Debian上如何更新PyTorch版本 Debian下PyTorch安装步骤是什么

游客 回复需填写必要信息