首頁 > 資料庫 > mysql教程 > 介紹MySQL Buffer pool裡的change buffer

介紹MySQL Buffer pool裡的change buffer

coldplay.xixi
發布: 2021-03-29 09:47:55
轉載
1977 人瀏覽過

介紹MySQL Buffer pool裡的change buffer

4 change buffer

#4.1 基本概念

##change buffer是一種特殊的資料結構,當這些頁面不在緩衝池中時,這些快取都會將變更快取到輔助索引頁面。可能由INSERT,UPDATE或DELETE操作(DML)導致的緩衝變更將在以後透過其他的

讀取操作將頁載入到緩衝池中時合併。

相關免費學習推薦:

mysql影片教學

#如上圖可見,change buffer用的是buffer pool裡的內存,所以不能無限增長。 change buffer大小可透過參數innodb_change_buffer_max_size動態設定。

例如設定為50:change buffer的大小最多只能佔用buffer pool的50%。

需更新一個資料頁時:

    頁在內存,直接更新
  • 頁不在內存,在不影響資料一致性下,InooDB會將這些更新操作緩存在change buffer,而無需從磁碟讀入頁
在下次查詢訪問該數據頁時,才將數據頁讀入內存,然後執行change buffer中與這個頁有關的操作。透過該方式就能保證該資料邏輯的正確性。

change buffer 實際上也是可持久化的數據,即它不僅在記憶體中有拷貝,也會被寫入磁碟。

4.2 merge

將change buffer中的操作套用到原始資料頁,得到最新結果的過程。

4.2.1 觸發時機

    存取該資料頁
  1. 系統後台執行緒定期merge
  2. 資料庫正常關閉(shutdown)的過程
若能將更新操作先記錄在change buffer,減少讀盤,語句執行速度就會明顯提升。且資料讀入記憶體需要佔用buffer pool,因此也能降低記憶體佔用,提高記憶體使用率。

4.3 何時使用change buffer

    對於唯一索引,更新操作都要先判斷該操作是否違反唯一性限制:
  • 例如,要插入(4,400)記錄,要先判斷表中是否已存k=4記錄,就必須將資料頁讀入記憶體來判斷。若都已讀入記憶體了,那麼直接更新記憶體自然很快,沒必要使用change buffer。
    因此,唯一索引的更新不能使用change buffer,
    只有普通索引可以使用

4.4 適用場景

所有普通索引的場景,使用change buffer都可加速嗎?

注意merge才是真正進行資料更新時刻,change buffer主要是將記錄的變更動作快取。所以在一個資料頁做merge前,change buffer記錄變更越多(也就是該資料頁上要更新的次數越多),效益越大。

    寫多讀少業務,頁面在寫完後馬上被訪問到的機率較小,change buffer使用效果最好。常見為帳單、日誌類系統。
  • 寫後馬上查詢,將先新記錄在change buffer,但之後由於立即訪問該數據頁,又很快觸發merge,這樣的話隨機訪問IO次數不會減少,反而增加change buffer維護代價,change buffer起了副作用。

更多相關免費學習推薦:##mysql教學(影片) #

以上是介紹MySQL Buffer pool裡的change buffer的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板