buffer cache 記憶體管理物理結構純乾貨
buffer cache 裡有三種資料結構來管理記憶體空間
1 hash chain 2 LRU LIST 3 DIRTY LIST
hash chain 是為快速定位buffer cache中塊的結構,主要通過hash連結串列實現。每個hash桶對應一個hash鏈。鏈上每個header指向一個資料塊,
一個hash latch管理多個hash桶。
有對應隱含引數管理latch個數,和hash桶的個數。大概一個latch管理32個hash桶。latch就是桶上的鎖,如果兩個程式都已只讀方式讀取鏈上
的兩個塊,那麼latch可以對只讀共享。如果一個程式讀一個塊,另一個程式要修改桶對應鏈上的另一個塊,就是獨佔方式訪問,於是要等前一個
程式釋放latch才能用獨佔方式訪問這個塊。後一個程式在等待前一個程式釋放latch時,發生等待事件latch:cache buffers chains。
對這個等待事件解決方法,可能遇到大量邏輯讀很多的sql,要邏輯讀,就要訪問一個塊,就可能獲取latch,引發大量latch:cache buffers chains
爭用,於是根據邏輯讀排序找出邏輯讀最多的sql,調整其執行計劃。
等待事件具體診斷可參考 latch:cache buffers chains的優化思路 http://blog.itpub.net/24742969/viewspace-1692853/
LRU list在快取初始載入時,所有buffer cache 塊都放到LRU list管理,從磁碟讀取資料到記憶體前,先檢視LRU list找到一個空塊,以便存放磁碟
讀到記憶體的資料。讀LIST的時候如果有塊時髒塊,就把這樣的塊放到dirty LIST。掃描LRU list超過40%還沒找到空塊,停止掃描寫dirty LIST髒資料
到磁碟,並給出free buffer wait等待事件,如果經常發生這個事件就要考慮加大Buffer Cache了。還有如果dirty LIST超過25%也會寫髒資料
到磁碟。
通俗的說就是先通過hash chain找到記憶體塊讀資料,如果讀取的資料沒在記憶體塊,就要從磁碟讀資料到記憶體,讀入記憶體時哪個塊是空塊,或要換出記憶體被
寫入磁碟資料由LRU決定。如果塊上的資料是髒資料就用dirtyLIST 管理,髒資料寫出後,該塊仍由LRU管理
LRU LIST 和 DIRTY LIST 統一稱為working set 他們也需要latch保護,因為他們是共享的用於管理記憶體的塊,需要latch防止資料的破壞
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/750077/viewspace-2141441/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Buffer Cache的記憶體結構記憶體
- Oracle中Buffer Cache記憶體結構Oracle記憶體
- 17_buffer_cache記憶體組織結構剖析記憶體
- buffer cache實驗1-記憶體結構圖解記憶體圖解
- Oracle10g data buffer cache的記憶體結構Oracle記憶體
- Linux記憶體管理Swap和Buffer Cache機制Linux記憶體
- Linux記憶體、Swap、Cache、BufferLinux記憶體
- Library Cache 結構及記憶體管理 [final]記憶體
- 記憶體中,cache與buffer的含義記憶體
- Linux記憶體管理機制中buffer和cache的區別Linux記憶體
- oracle記憶體結構與管理Oracle記憶體
- linux中記憶體使用,swap,cache,buffer的含義Linux記憶體
- React Native純乾貨總結React Native
- oracle buffer cache管理機制_buffer cache dump與lru機制小記Oracle
- [Virtualization]ESXi體系結構與記憶體管理(一)體系結構記憶體
- 乾貨分享:淺談記憶體洩露記憶體洩露
- [Virtualization]ESXi體系結構與記憶體管理(二)控制記憶體分配記憶體
- [Virtualization]ESXi體系結構與記憶體管理(三)控制記憶體分配記憶體
- 記憶體結構記憶體
- 關於PaaS的純乾貨總結
- Linux 記憶體管理:Kmem_cache_initLinux記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(轉)快取記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(1)快取記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(2)快取記憶體
- 調整緩衝區快取記憶體(Buffer Cache)的效能(3)快取記憶體
- 記憶體_管理總結記憶體
- PostgreSQL:記憶體結構SQL記憶體
- oracle 記憶體結構Oracle記憶體
- JVM記憶體結構JVM記憶體
- Oracle體系結構之-記憶體結構Oracle記憶體
- 在 Linux 上如何清除記憶體的 Cache、Buffer 和交換空間Linux記憶體
- Linux作業系統中記憶體buffer和cache的區別Linux作業系統記憶體
- 結構體記憶體對齊結構體記憶體
- Oracle記憶體體系結構Oracle記憶體
- 【基礎篇記憶體結構】oracle10g記憶體結構(一)記憶體Oracle
- 記憶體管理 記憶體管理概述記憶體
- oracle 記憶體結構(二)Oracle記憶體
- 調節記憶體結構記憶體