cache的原理,buffer cache 內存管理物理結構純干貨

 2023-10-05 阅读 28 评论 0

摘要:buffer cache 里有三種數據結構來管理內存空間 1 hash chain 2 LRU LIST 3 DIRTY LIST hash chain 是為快速定位buffer cache中塊的結構,主要通過hash鏈表實現。每個hash桶對應一個hash鏈。鏈上每個header指向一個數據塊, ?一個hash latch管理多個hash桶。 ?有

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%也會寫臟數據
?到磁盤。

cache的原理? 通俗的說就是先通過hash chain找到內存塊讀數據,如果讀取的數據沒在內存塊,就要從磁盤讀數據到內存,讀入內存時哪個塊是空塊,或要換出內存被
?寫入磁盤數據由LRU決定。如果塊上的數據是臟數據就用dirtyLIST 管理,臟數據寫出后,該塊仍由LRU管理
LRU LIST 和 DIRTY LIST 統一稱為working set 他們也需要latch保護,因為他們是共享的用于管理內存的塊,需要latch防止數據的破壞

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/118064.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息