Buffer Cache Advisory中ESTD_PHYSICAL_READS突降表明db_cache_size越过临界点后物理读边际收益锐减,应选取拐点后斜率趋平的性价比最优档位,并确认其符合Granule Size对齐要求且SIZE_FACTOR≥1.0。
Buffer Cache Advisory里ESTD_PHYSICAL_READS突降说明什么
它不直接代表“缓存变好了”,而是反映当前db_cache_size下的预估物理读变化趋势。突降通常发生在建议尺寸刚越过某个临界点(比如从 4g 到 6g),意味着再增加 buffer cache 对减少物理读的边际收益已快速衰减。
实操建议:
- 别只盯着最低点——找“拐点后斜率明显变平”的区间,比如
ESTD_PHYSICAL_READS从 12000 降到 11800 再到 11795,后两档增幅几乎为零,那前一档就是性价比终点 - 确认该建议值是否落在
V$SGAINFO的Granule Size对齐边界上;Oracle 只能按粒度分配,若建议是 5.3G 但粒度是 4M,实际生效的是向下/向上取整后的值 - 检查
V$DB_CACHE_ADVICE中对应SIZE_FOR_ESTIMATE行的SIZE_FACTOR是否 ≥ 1.0——小于 1 是压缩或降级模拟,不能当真实扩容依据
Shared Pool Advisory和Library Cache命中率的关系
Shared Pool Advisory本身不直接输出命中率,但它通过不同shared_pool_size配置下预估的Est LC Mem Obj(库缓存内存对象数)和Est LC Time Saved(节省的解析时间),间接反映硬解析压力变化。真正要看命中率,得回看报告中“Instance Efficiency Percentages”部分的Library Hit %,理想值应 > 99%。
常见错误现象:
-
Library Hit %V$SGASTAT中free memory在 shared pool 下持续 - AWR 中“SQL ordered by Parse Calls”里大量重复 SQL 出现,且
% SQL with Version Count > 1> 15%
这时即使Shared Pool Advisory显示增大 shared pool 能多缓存对象,也应优先排查绑定变量未使用、SQL 文本不规范等根因,而非盲目扩容。
PGA Memory Advisory与排序/Hash操作溢出判断
PGA Memory Advisory的核心指标是Est PGA Overalloc Count。只要该列出现大于 0 的值(尤其在SIZE_FACTOR ≥ 1.0 行),就说明当前pga_aggregate_target不足以支撑峰值工作负载,部分排序、Hash Join 或位图运算被迫写入temp表空间,触发direct path read/write temp等待。
使用场景:
- 发现 Top 5 等待事件中有
direct path read temp或direct path write temp -
V$SQL_WORKAREA_ACTIVE中ACTUAL_MEM_USED频繁接近甚至超过WORK_AREA_SIZE
注意:PGA Memory Advisory基于历史统计估算,若系统近期未发生大并发排序,该列可能全为 0,但不代表无风险——需结合V$PGASTAT中的bytes processed和extra bytes read/written实时验证。
SGA Target Advisory为何常被忽略但很关键
SGA Target Advisory给出的是整体 SGA(含 buffer cache、shared pool、large pool 等)统一调整时的物理读预估变化。它比单独看 Buffer 或 Shared Pool Advisory 更贴近真实影响,因为 Oracle 在自动内存管理(AMM/ASMM)下会动态重分配各池大小。
容易踩的坑:
- 只调高
db_cache_size却没设sga_target,导致 Oracle 无法启用 ASMM,buffer cache 扩容无效 -
sga_target设得太小(如仅略大于当前sga_max_size),使 Advisory 中所有SIZE_FACTOR都卡在 1.0,失去参考价值 - 误把
SGA Target Advisory里的Est Phys Read Factor当成 buffer cache 专用指标,忽略了 shared pool 缩小可能引发 library cache latch 争用
真正要落地,得先确认V$SGA_DYNAMIC_COMPONENTS中各组件确实在动态调整,再比对V$SGAINFO的Granule Size与建议值是否对齐——否则改了也白改。











