Mysql快速學習——InnoDB的內存緩沖池Change Buffer

2. Change Buffer

寫請求的處理流程

(1)如果索引頁不在buffer pool中, 則先把索引頁,從磁盤加載到緩沖池,一次磁盤隨機讀操作;
(2)修改緩沖池中的頁,一次內存操作;
(3)寫入redo log,一次磁盤順序寫操作;


寫請求處理

是否會出現一致性問題呢?

不會, 因為:
(1)讀取,會命中緩沖池的頁;
(2)緩沖池LRU數據淘汰,會將“臟頁”刷回磁盤;
(3)數據庫異常奔潰,能夠從redo log中恢復數據;


利用Change Buffer進行優(yōu)化

上述場景中, 被讀取的數據沒有命中緩沖池的時候,會先從磁盤索引頁到緩沖池中, 這樣至少產生一次磁盤IO,對于寫多讀少的業(yè)務場景,性能壓力會劇增, 于是InnoDB引入了Change Buffer:

  • 當對頁進行了寫操作,并不會立刻將磁盤頁加載到緩沖池
  • 先把頁的寫操作記錄到緩沖變更池(buffer changes)
  • 等未來數據被讀取時,再將數據合并(merge)恢復到緩沖池中

寫緩沖的目的是降低寫操作的磁盤IO,提升數據庫性能。


Change Buffer

在內存中,Change Buffer占用Buffer Pool的一部分。在磁盤上,Change Buffer是系統(tǒng)表空間的一部分,其中的索引會在關閉數據庫服務器時更改。


Change Buffer相關參數配置
  • 配置Change Pool最大大小
    ---innodb_change_buffer_max_size: 允許將Change Buffer的最大大小配置為緩沖池總大小的百分比。默認情況下, innodb_change_buffer_max_size設置為25.最大設置為50。
  • 配置Change Buffer的適用范圍
    ---innodb_change_buffering: all | none | inserts | deletes | changes | purges
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容