You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 19c中使用V$BH视图查询缓冲池内容不可靠问题咨询

现象原因

  1. 关联字段匹配错误(核心原因)
    V$BH视图的OBJD字段存储的是段的物理ID,需要和DBA_OBJECTS视图的DATA_OBJECT_ID字段匹配,而非你使用的OBJECT_ID。对于分区表这类包含多个独立子段的对象,每个分区、分区索引的OBJECT_ID(逻辑对象ID)和DATA_OBJECT_ID(物理段ID)并不一致,使用错误的关联字段自然无法匹配到缓冲块记录。
  2. 权限问题(次要可能)
    查询V$BH底层视图V_$BH需要用户持有SELECT ANY DICTIONARY系统权限,或者被显式授予该视图的查询权限。如果权限不足也可能返回空结果,但你给出的执行统计无报错,该场景概率较低。
  3. 你提到的全表扫描0物理读说明数据确实从缓冲池读取,可以排除direct path read(直接路径读,数据直接载入PGA不进入SGA缓冲池)的可能性。

可靠的缓冲池内容查询方法

正确查询语句

使用DATA_OBJECT_ID做关联,同时覆盖所有分区、索引等子段:

SELECT 
    o.owner,
    o.object_name,
    o.subobject_name,
    o.object_type,
    COUNT(DISTINCT b.block#) AS distinct_block_count,
    COUNT(b.block#) AS total_block_count
FROM 
    dba_objects o,
    v$bh b
WHERE 
    b.objd = o.data_object_id
    AND b.status != 'free'
    AND o.owner = 'MY_SCHEMA'
    AND o.object_name LIKE 'GRID_LTA%'
GROUP BY 
    o.owner,
    o.object_name,
    o.subobject_name,
    o.object_type
ORDER BY 
    o.object_name,
    o.subobject_name;

额外注意事项

  • 如果要单独过滤KEEP池的块,可以在WHERE条件中新增b.buffer_pool = 'KEEP'
  • 19c多租户架构下如果使用PDB,可新增b.con_id = <对应PDB的ID>过滤,避免CDB全局块干扰
  • 测试环境下可以先执行ALTER SYSTEM FLUSH BUFFER_CACHE;清空缓冲池(生产环境禁止执行,会引发严重性能抖动),再运行业务查询后查V$BH,结果会更准确无冗余。

内容的提问来源于stack exchange,提问作者Tony Zucchini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:57:00