Oracle 的 PGA_AGGREGATE_LIMIT 参数

发布于:2025-05-20 ⋅ 阅读:(16) ⋅ 点赞:(0)

Oracle 的 PGA_AGGREGATE_LIMIT 参数

基本概念

PGA_AGGREGATE_LIMIT 是 Oracle 数据库 12c 引入的一个重要内存管理参数,用于限制所有服务器进程使用的 PGA(Program Global Area)内存总量。

参数作用

  1. 硬性限制:设置 PGA 内存使用的绝对上限
  2. 安全防护:防止 PGA 内存无限制增长导致系统内存耗尽
  3. 资源控制:确保系统有足够内存供操作系统和其他应用使用

默认值

  • Oracle 12.1 及更高版本:
    • 如果设置了 MEMORY_TARGETMEMORY_MAX_TARGET,则默认值为 MEMORY_MAX_TARGET 的 200%
    • 否则默认值为 2GB 或 120% 的 PGA_AGGREGATE_TARGET(取两者中较大者),但不超过物理内存的 60%

设置方法

-- 查看当前值
SELECT name, value, display_value 
FROM v$parameter 
WHERE name = 'pga_aggregate_limit';

-- 动态修改
ALTER SYSTEM SET pga_aggregate_limit = 8G SCOPE=BOTH;

工作原理

当 PGA 使用量接近限制时:

  1. Oracle 首先尝试通过终止使用最多 PGA 的非关键会话(如作业队列进程)来减少内存使用
  2. 如果仍超过限制,会终止使用最多 PGA 的会话(包括用户会话)
  3. 在警报日志中记录相关事件

监控 PGA 使用

-- 查看 PGA 总体使用情况
SELECT * FROM v$pgastat;

-- 查看各进程 PGA 使用
SELECT program, pga_used_mem, pga_alloc_mem, pga_max_mem 
FROM v$process 
ORDER BY pga_used_mem DESC;

-- 监控 PGA 限制接近情况
SELECT name, value 
FROM v$pgastat 
WHERE name IN ('total PGA allocated', 'total PGA inuse', 
              'over allocation count', 'cache hit percentage');

最佳实践建议

  1. 生产环境设置:建议显式设置此参数,通常为 PGA_AGGREGATE_TARGET 的 150-200%
  2. 监控警报:设置警报监控 PGA_AGGREGATE_LIMIT 接近情况
  3. 调整依据
    • 观察 v$pgastat 中的 “over allocation count” 值
    • 监控 “total PGA allocated” 与限制值的比率
  4. 特殊场景
    • 内存密集型操作(如大型排序、哈希连接)较多的系统应设置更高限制
    • OLTP 系统可以设置相对较低的限制

PGA_AGGREGATE_LIMIT 提供了比 PGA_AGGREGATE_TARGET 更强的控制,确保 PGA 内存使用不会失控。

更多内容请查看官方文档:

https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/PGA_AGGREGATE_LIMIT.html

网站公告

今日签到

点亮在社区的每一天
去签到