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。
相關文章
- Oracle Cache Buffer ChainsOracleAI
- 用於排查cache buffers chainsAI
- Leetcode LRU CacheLeetCode
- LRU cache原理及go實現Go
- 動手實現一個 LRU cache
- LRU cache快取簡單實現快取
- 用 Go 實現一個 LRU cacheGo
- IO之核心buffer----"buffer cache"
- 【Cache】將常用的“小表”快取到Buffer Cache快取
- LRU Cache的原理和python的實現Python
- library cache lock和library cache bin實驗_2.0
- 33、buffer_cache_3(redo的產生、LRBA、buffer cache裡的等待事件)事件
- Linux Buffer/Cache 的區別Linux
- buffer與cache的區別
- Python 中 lru_cache 的使用和實現Python
- 清理buffer/cache/swap的方法梳理
- PostgreSQL DBA(89) - Linux(Buffer vs Cache)SQLLinux
- Linux記憶體、Swap、Cache、BufferLinux記憶體
- Buffer Cache以及buffer busy waits/gc相關事件AIGC事件
- 【BUFFER】Oracle buffer cache之 latch 學習記錄Oracle
- Cache 和 Buffer 的區別在哪裡?
- Cache 和 Buffer 有什麼區別?
- buffer cache深度分析及效能調整(五)
- buffer cache深度分析及效能調整(四)
- buffer cache深度分析及效能調整(六)
- Android快取機制-LRU cache原理與用法Android快取
- Python 的快取機制: functools.lru_cachePython快取
- 通過原始碼學習@functools.lru_cache原始碼
- 從 LRU Cache 帶你看面試的本質面試
- Linux工具效能調優系列二:buffer和cacheLinux
- Linux如何手動釋放Swap、Buffer和CacheLinux
- PostgreSQL的shared_buffers和系統OS cache的關係SQL
- [20231023]備庫與alter system flush buffer_cache.txt
- 手動釋放Linux上的Swap、Buffer和CacheLinux
- Cache和Buffer都是快取,有什麼區別?Linux快取Linux
- 使用LinkedHashMap來實現一個使用LRU(Least Recently Used)演算法的cacheHashMapAST演算法
- 演算法題:設計和實現一個 LRU Cache 快取機制演算法快取
- library cache pin和library cache lock(一)
- library cache pin和library cache lock (zt)