buffer cache實驗5-latch:cache buffers chain

還不算暈發表於2014-02-26

1.CBC latch產生的原理:

一次邏輯讀時CBC latch鎖及Buffer pin鎖的獲取和釋放過程如下:
1.加Latch X
2.進入hash chain,在相應的BH上加Buffer pin S (0-->1)
3.釋放Latch X
4.進行邏輯讀--也就是通過BH中的buffer adderss找到資料塊在記憶體中真實位置  ---假如讀了1MS
5.加Latch X
6.釋放Buffer pin S (1-->0)  0:沒鎖  1:共享鎖  2:獨佔鎖
7.釋放Latch X
物理讀時需要將資料塊的buffer header掛載到hash chain上,也需要獲取CBC LATCH,buffer header中有hash chain的資訊,BH掛載到hash chain上,應該在BH記憶體結構中會有資訊更改,BH的修改也就需要有Buffer pin了,鎖的獲取和釋放應該和邏輯讀時差不多,不過是在Buffer pin S 上要加2號獨佔鎖。當然這一點是我大膽推測的哈哈。

CBC latch上一般都用的獨佔鎖,使用共享鎖的情況是:9I後在索引的根、枝葉讀時使用共享CBC LATCH,無BUFFER PIN方式訪問上
BH上Buffer pin鎖狀態:
0 未加鎖
1 共享鎖,讀BUFFER BLOCK  ---SELECT
2 獨佔鎖,寫BUFFER BLOCK   ---DML語句

2.從CBC latch產生的原理可以發現,出現CBC LATCH爭用會有以下情況:


1.CBC latch保護不同的連結串列、不同BH   :同一CBC LATCH下多個hash chain上的多個BH被同時訪問時,
2.CBC latch保護同一連結串列下同一BH  :同一hash chain上同一BH被同時訪問時
3.物理讀將資料塊掛載到hash chain上時,多個物理塊HASH衝突都掛載到同一個hash chain或者要掛載的hash chain上的BH在被邏輯讀
這裡的被訪問,可能發生在邏輯讀或者物理讀,即:使用到CBC latch的場景是:
伺服器程式需要掃描hash chain上資料塊--邏輯讀
伺服器程式需要將資料塊掛載到hash chain上--物理讀
關於hash chain與hash bucket,詳見本系列第一篇:點選開啟連結

3.關於CBC LATCH爭用的模擬實驗,有兩種思路:

一是熱鏈--這個不太好模擬,我也沒做成功。
二是熱塊-這個好模擬,同時還會有buffer busy waits,具體實驗見:點選開啟連結

4.latch: cache buffers chains 解決思路:

1、熱鏈:調整_db_block_hash_latches加大latch數量,作用是減少同一LATCH下多個桶被同時訪問的情況。即多個表的相應塊在BUFFER CACHE中對應不同BH,不同BH又對應在不同HASH BUCKETS,但是這多個HASH BUCKETS是屬於同一個LATCH。。
alter system set "_db_block_hash_latches"=10240 scope=spfile;    
2、熱塊:調整BUFFER _CACHE,引數:db_cache_size,big integer 100M
熱塊是:同一表在BUFFER CACHE中的塊(一個塊對應一個BH,BH對應一個HASH BUCKET)被多個會話同時讀,--全表掃描時容易出現。可以使用多個會話同時讀取同一表的同一行的方式來模擬產生CBC latch,查詢時使用ROWID做條件,查詢速度快,更容易引起CBC latch。
3、修改應用,減少全表掃描,也就是優化SQL語句了

例如:CBC Latch的產生次數的查詢:
SYS@ bys3>col name for a20
SYS@ bys3>select NAME,GETS ,MISSES ,SLEEPS ,IMMEDIATE_GETS, IMMEDIATE_MISSES from v$latch where name like '%cache buffers chains%';
NAME                       GETS     MISSES     SLEEPS IMMEDIATE_GETS IMMEDIATE_MISSES
-------------------- ---------- ---------- ---------- -------------- ----------------
cache buffers chains    2006932          0          0          78095                0

相關文章