X$BH 記錄每個緩衝區在 Buffer Cache 中的狀態,關鍵欄位:TCH (Touch Count) 訪問次數,**TCH 越高 = 熱點區塊競爭越嚴重**。
SELECT * FROM (
SELECT addr, ts#, file#, dbarfil, dbablk, tch
FROM x$bh
ORDER BY tch DESC
) WHERE ROWNUM < 11;
SELECT e.owner, e.segment_name, e.segment_type
FROM dba_extents e,
(SELECT * FROM (
SELECT addr, ts#, file#, dbarfil, dbablk, tch
FROM x$bh ORDER BY tch DESC
) WHERE ROWNUM < 11) b
WHERE e.relative_fno = b.dbarfil
AND e.block_id <= b.dbablk
AND e.block_id + e.blocks > b.dbablk;
SELECT * FROM (
SELECT addr, child#, gets, misses, sleeps,
immediate_gets igets, immediate_misses imiss, spin_gets sgets
FROM v$latch_children
WHERE name = 'cache buffers chains'
ORDER BY sleeps DESC
) WHERE ROWNUM < 11;
SELECT b.addr, a.ts#, a.dbarfil, a.dbablk, a.tch,
b.gets, b.misses, b.sleeps
FROM (SELECT * FROM (
SELECT addr, ts#, file#, dbarfil, dbablk, tch, hladdr
FROM x$bh ORDER BY tch DESC
) WHERE ROWNUM < 11) a,
(SELECT addr, gets, misses, sleeps
FROM v$latch_children
WHERE name = 'cache buffers chains') b
WHERE a.hladdr = b.addr;
SELECT DISTINCT e.owner, e.segment_name, e.segment_type
FROM dba_extents e,
(SELECT * FROM (
SELECT addr, ts#, file#, dbarfil, dbablk, tch
FROM x$bh ORDER BY tch DESC
) WHERE ROWNUM < 11) b
WHERE e.relative_fno = b.dbarfil
AND e.block_id <= b.dbablk
AND e.block_id + e.blocks > b.dbablk;
BREAK ON HASH_VALUE SKIP 1
SELECT /*+ RULE */ hash_value, sql_text
FROM v$sqltext
WHERE (hash_value, address) IN (
SELECT a.hash_value, a.address
FROM v$sqltext a,
(SELECT DISTINCT a.owner, a.segment_name, a.segment_type
FROM dba_extents a,
(SELECT dbarfil, dbablk
FROM (SELECT dbarfil, dbablk
FROM x$bh ORDER BY tch DESC
) WHERE ROWNUM < 11) b
WHERE a.relative_fno = b.dbarfil
AND a.block_id <= b.dbablk
AND a.block_id + a.blocks > b.dbablk) b
WHERE a.sql_text LIKE '%' || b.segment_name || '%'
AND b.segment_type = 'TABLE'
)
ORDER BY hash_value, address, piece;
CONNECT BY、PL/SQL 迴圈 等易引發熱點邏輯 → 改寫算法或調整 _DB_BLOCK_HASH_BUCKETS (隱含參數) 擴大雜湊桶減少鏈長。