buffer cache實驗5-latch:cache buffers chain
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語句了
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
相關文章
- cache buffers chains vs cache buffers lru chainAI
- cache buffers lru chainAI
- buffer cache實驗6-latch:cache buffers lru chainsAI
- cache buffer chainAI
- cache buffers LRU chain latchAI
- latch free(cache buffers chain)AI
- 等待模擬-cache buffer chainAI
- Cache Buffer Chain Latch等待事件AI事件
- 等待事件_cache_buffers_lru_chain_latch事件AI
- cr塊和latch buffer cache chainAI
- cache buffer chain latch只讀共享?AI
- cache buffer lru chain latch等待事件AI事件
- oracle實驗記錄(buffer_cache分析(3)cbc lru chain latch)OracleAI
- latch free 中 cache buffer chain 的整理AI
- cache buffers chains and cache buffers lru chainsAI
- cache buffer chain latch可以以只讀模式共享AI模式
- buffer cache實驗7-buffer busy waits-完成AI
- buffer cache實驗8-free buffer waits-完成AI
- oracle實驗記錄 (buffer_cache分析(1))Oracle
- latch: cache buffers chainsAI
- Buffer Cache 原理
- page cache與buffer cache的關係
- latch:cache buffers chains案例AI
- High Water Mark過高導致cache buffer chain等待嚴重AI
- Buffer Cache Hit Ratio
- Oracle Buffer Cache原理Oracle
- Oracle database buffer cacheOracleDatabase
- CACHE BUFFER CHAINSAI
- Database Buffer Cache (79)Database
- oracle實驗記錄 (buffer_cache分析(2)cbc latch)Oracle
- buffer busy waits, latch cache buffers chains, read by other session區別AISession
- IO之核心buffer----"buffer cache"
- latch: cache buffers chains---AWR實戰分析AI
- latch: cache buffers chains-熱塊的簡單模擬實驗AI
- 用於排查cache buffers chainsAI
- Cache Buffers chains,存在共享模式?AI模式
- buffer cache實驗1-記憶體結構圖解記憶體圖解
- oracle實驗記錄(buffer_cache分析(4)dbwr,lgwr,ckpt)Oracle