在 AWR 里区分Buffer Cache 问题 和PGA 问题,核心逻辑是:
Buffer Cache 是“读不进来” → 等 I/O 把数据块装进内存
PGA 是“装不下” → 排序/Hash 溢到临时表空间
两者等待事件完全不同,不会混淆。下面给你一套“看等待事件就能秒判”的方法。
一、先看 Wait Class 定性
Wait Class | 对应内存区域 | 含义 |
|---|---|---|
| Buffer Cache | 数据块不在内存,要等磁盘读 |
| Buffer Cache / Redo | DBWR/LGWR 后台写 |
| Shared Pool / Latch | 游标/锁竞争 |
| PGA | 排序/Hash 溢盘 |
二、Buffer Cache 问题的特征等待事件
核心事件
等待事件 | 含义 |
|---|---|
| 单块读:索引扫描/回表,块不在 Buffer Cache |
| 多块读:全表扫,块不在 Buffer Cache |
| 大表直接读绕过 Buffer Cache(11g+ 自动判定) |
| Buffer Cache 严重不足,DBWR 来不及腾空间 |
| Buffer Cache 热块争用(高并发访问同一块) |
AWR 里的配套特征
- Buffer Hit % 低(<90%)
- Physical reads/sec 高
- Top Segments 里
MTL_MATERIAL_TRANSACTIONS索引/表排前列 - Buffer Cache Advisory:加大后
Est Phys Read Factor明显下降
一句话判定
等
db file*+ Buffer Hit 低 + 物理读高 → Buffer Cache 装不下,数据在磁盘上
三、PGA 问题的特征等待事件
核心事件
等待事件 | 含义 |
|---|---|
| PGA 不够,排序结果溢到临时表空间 |
| Hash Join/排序写临时文件 |
| 磁盘排序(AWR 的 Instance Activity Stats 里) |
| PGA 分配/回收等待 |
AWR 里的配套特征
- In-Memory Sort % 低(<95%)
- PGA Memory Advisory:
Estd Extra W/A MB Read/Written to Disk大 - PGA Overalloc Count > 0
- Temp Tablespace 使用率飙升
- SQL ordered by Sorts/Disk:INCTCW 或移动单分配 SQL 排前列
一句话判定
等
direct path * temp+ 磁盘排序高 + PGA Advisory 溢盘 → PGA 不够,运算在临时表空间上
四、对比表:一眼区分
维度 | Buffer Cache 问题 | PGA 问题 |
|---|---|---|
等什么 |
|
|
为什么等 | 数据块不在内存,要读磁盘 | 排序/Hash 放不下,写临时文件 |
命中率指标 | Buffer Hit % 低 | In-Memory Sort % 低 |
Advisory 看哪个 | Buffer Cache Advisory | PGA Memory Advisory |
溢出去哪 | 物理数据文件 | 临时表空间 |
INV 典型场景 | MMT 全表扫报表、Workbench 无日期裁剪 | INCTCW 大批量过账、移动单分配大排序、15万序列号接口 |
解决方向 | 加 db_cache_size / 分区 / SQL 加日期谓词 | 加 pga_aggregate_target / 分批 / 减少排序行数 |
五、实战:AWR 里 30 秒定性
Step 1:打开 AWR → Top 10 Timed Foreground Events
如果看到: db file sequential read 45% db file scattered read 20% → Buffer Cache 问题 如果看到: direct path read temp 50% direct path write temp 15% → PGA 问题 如果两者都有: 看谁 % of DB Time 更高 → 谁是主瓶颈Step 2:确认 Advisory
- Buffer Cache 问题 → 翻到Buffer Cache Advisory,看 Size Factor=1.0 行的
Est Phys Read Factor,如果加大到 1.5x 时因子掉一半 → 确认 Buffer Cache 不足 - PGA 问题 → 翻到PGA Memory Advisory,看
Estd Extra W/A MB Read/Written to Disk,非 0 且大 → 确认 PGA 不足
Step 3:定位 SQL
- Buffer Cache →
SQL ordered by Gets找扫MTL_*大表的 SQL - PGA →
SQL ordered by Sorts/Disk找排序大的 SQL
六、INV 场景两个经典画面
画面 1:Material Workbench 全组织慢
Top Events: db file sequential read 50% direct path read 20% Buffer Hit %: 82% Buffer Cache Advisory: 当前 4G → 6G 物理读降 40% → Buffer Cache 装不下 MMT,加 Buffer Cache + 加日期条件画面 2:INCTCW 批量过账卡 + temp 暴涨
Top Events: direct path read temp 55% direct path write temp 20% In-Memory Sort %: 60% PGA Advisory: Overalloc=1, Extra W/A=8000MB → PGA 不够,分批过账 + 加 pga_aggregate_target七、一句话总结
等磁盘数据文件 = Buffer Cache 不够(读不进来)
等临时文件 = PGA 不够(装不下溢出去了)