2013年4月3日 星期三

遇到 DB 等待事件 CACHE BUFFERS CHAINS,如何找出可能的 Hot Blocks

Step 1
執行以下的語法(多跑幾次),找出 SLEEPS 欄位中最大值所對應的 latch id (即 ADDR 欄位)

select CHILD#  "cCHILD"
     ,      ADDR    "sADDR"
     ,      GETS    "sGETS"
     ,      MISSES  "sMISSES"
     ,      SLEEPS  "sSLEEPS" 
     from v$latch_children 
     where name = 'cache buffers chains'
     order by 5, 1, 2, 3;

Step 2
再執行以下的語法,看一下 TCH 欄位,TCH 值越高表示 DB block 越頻繁地被 access => hot blocks

column segment_name format a35
select /*+ RULE */
   e.owner ||'.'|| e.segment_name segment_name,
   e.extent_id extent#,
   x.dbablk - e.block_id + 1 block#,
   x.tch,
   l.child#
from
   sys.v$latch_children l,
   sys.x$bh x,
   sys.dba_extents e
where
   x.hladdr = '&ADDR' and
   e.file_id = x.file# and
   x.hladdr = l.addr and
   x.dbablk between e.block_id and e.block_id + e.blocks -1
order by x.tch desc;

參考資料:Metalink Note 163424.1

沒有留言:

張貼留言