buffer cache實驗6-latch:cache buffers lru chains
1.working set與Latch:cache buffers lru chain:
每個working set都具有它自己的一組LRU和LRUW連結串列(LRU和LRUW連結串列總是成對出現的)。ORACLE為了提高buffer cache效能(大記憶體),使用了多個working set
每個working set都由一個名為“Latch:cache buffers lru chain”的latch來保護,每一個lru latch對應一個working set。
而每個被載入到buffer cache的buffer header都以輪詢的方式掛到working set(包含的LRU連結串列)上去--。
而每個被載入到buffer cache的buffer header都以輪詢的方式掛到working set上去。也就是說,當buffer cache載入一個新的資料塊時,其對應的buffer header會去找一個可用的lru latch,如果沒有找到,則再找下一個lru latch,直到找到為止。如果輪詢完所有的lru latch也沒能找到可用的lru latch,該程式只有等待latch free等待事件,同時出現在v$session_wait中,並增加“latch misses”。
如果啟用了多個DBWR後臺程式的話,每個DBWR程式都會對應一個不同的working set,而且每個DBWR只會處理分配給它的working set,不會處理其他的working set。
2.cache buffers lru chain LATCH的個數:
ORACLE預設建立的cache buffers lru chain LATCH數量與CPU個數、DBWR個數相關。DBWR小於4,個數為:4*CPU個數
DBWR大於4,個數為:DBWR*CPU個數
每個buffer pool使用自己的cache buffers lru chain LATCH,一個資料庫例項可以配置:DEFAULT,2KB,4KB,8KB,16KB,32KB,KEEP,RECYCLE 這8種型別的buffer pool,故cache buffers lru chain LATCH的數量最少為8個。詳見:點選開啟連結
或使用以下語句查出buffer cache中各個pool中cache buffers lru chain LATCH的獲取情況: --語句來自周亮《ORACLE DBA實戰攻略》
SYS@ bys3>select d.blk_size,c.child#,p.bp_name,c.gets,c.sleeps from x$kcbwds d,v$latch_children c,x$kcbwbpd p where d.set_latch=c.addr and d.set_id between p.bp_lo_sid and p.bp_hi_sid order by c.child#;
BLK_SIZE CHILD# BP_NAME GETS SLEEPS
---------- ---------- -------------------- ---------- ----------
8192 1 KEEP 18 0
8192 3 RECYCLE 18 0
8192 5 DEFAULT 864096 144
2048 7 DEFAULT 18 0
4096 9 DEFAULT 18 0
8192 11 DEFAULT 18 0
16384 13 DEFAULT 18 0
32768 15 DEFAULT 18 0
在我的虛擬機器中,CPU是一個,在10G中是有8個LRU LATCH,在11GR2中,是16個LRU LATCH.見:http://blog.csdn.net/haibusuanyun/article/details/19084583#t6
3.cache buffers lru chain LATCH在什麼情況下需要使用:
資料塊讀入buffer cache前需要獲得cache buffers lru chain LATCH--因為要到LRU上找空閒bufferDBWR掃描LRUW連結串列前需要獲得cache buffers lru chain LATCH
SMON將空閒buffer移動至LRU輔助列,也需要cache buffers lru chain LATCH。
4.cache buffers lru chain LATCH在哪些情況下出現爭用:
簡單說就是多個程式同時檢索LRU/LRUW時出現。具體情況有: --物理讀過多引起爭用概念高。
多個會話併發訪問不同表或索引,因為這樣發生物理讀可能較大--由上面可知物理讀時需要在LRU找空閒buffer
髒塊過多,DBWR寫出慢(DBWR的效能不足-主機效能問題,或者磁碟I/O),涉及DBWR調優-在此不多討論。
注:CBC LATCH主要發生在邏輯讀時-多會話併發訪問相同的表或索引-相同表或索引多集中於幾條相同hash chain。
相關文章
- cache buffers chains and cache buffers lru chainsAI
- cache buffers chains vs cache buffers lru chainAI
- buffer cache實驗5-latch:cache buffers chainAI
- cache buffers lru chainAI
- latch: cache buffers chainsAI
- CACHE BUFFER CHAINSAI
- cache buffers LRU chain latchAI
- latch:cache buffers chains案例AI
- Oracle Cache Buffer ChainsOracleAI
- Latch: cache buffer chains (%)AI
- 用於排查cache buffers chainsAI
- Cache Buffers chains,存在共享模式?AI模式
- buffer cache部分原理(LRU)
- latch: cache buffers chains---AWR實戰分析AI
- 深入理解latch: cache buffers chainsAI
- Trouble shooting latch: cache buffers chainsAI
- ORACLE等待事件latch: cache buffers chainsOracle事件AI
- 等待事件_cache_buffers_chains_latch事件AI
- buffer busy waits, latch cache buffers chains, read by other session區別AISession
- 模擬cache buffers chains與library cache pin等待事件AI事件
- 等待事件_cache_buffers_lru_chain_latch事件AI
- latch: cache buffers chains-熱塊的簡單模擬實驗AI
- latch:cache buffers chains解決步驟AI
- latch:cache buffers chains的優化思路AI優化
- cache buffer lru chain latch等待事件AI事件
- latch:cache buffers chains的最佳化思路AI
- oracle buffer cache管理機制_buffer cache dump與lru機制小記Oracle
- oracle實驗記錄(buffer_cache分析(3)cbc lru chain latch)OracleAI
- 熱點塊競爭和解決--cache buffers chainsAI
- cbc latch或cache buffer chains latch系列一AI
- latch: cache buffers chains故障處理總結(轉載)AI
- 解決一例latch:cache buffers chains小記AI
- 一次latch cache buffers chains問題的處理AI
- 0821Cache Buffers chains與共享模式疑問4AI模式
- 0330Cache Buffers chains與共享模式疑問AI模式
- 處理 latch_cache_buffers_chains等待事件一例AI事件
- buffer cache實驗7-buffer busy waits-完成AI
- buffer cache實驗8-free buffer waits-完成AI