MySQL 配置InnoDB變更緩衝

eric0435發表於2022-04-09

配置InnoDB變更緩衝
當在表上執行INSERT、UPDATE和DELETE操作時,索引列的值(特別是輔助鍵的值)通常是無序的,這需要大量的I/O來更新輔助索引。InnoDB有一個更改緩衝區,當相關的輔助索引頁面不在緩衝池中時,它將快取輔助索引的改變,這樣就不會立即從磁碟讀取頁面,從而避免了昂貴的I/O操作。當頁面載入到緩衝池時,緩衝的更改將被合併,更新後的頁面稍後將重新整理到磁碟。InnoDB主執行緒在伺服器幾乎空閒的時候,或者在緩慢關閉的時候,合併緩衝的變更。

因為它可以減少磁碟讀寫,所以更改緩衝區特性對於I/O限制的工作負載最有價值,例如具有大量DML操作(如批次插入)的應用程式。

但是,更改緩衝區佔用了緩衝池的一部分,減少了可用來快取資料頁的記憶體。如果工作集幾乎可以放進緩衝池,或者如果表的輔助索引相對較少,那麼禁用更改緩衝可能會很有用。如果工作集完全適合緩衝區,那麼更改緩衝區不會帶來額外的開銷,因為它只應用於不在緩衝池中的頁。

你可以使用innodb_change_buffering配置引數來控制InnoDB執行改變緩衝的程度。您可以為插入、刪除操作(當索引記錄最初被標記為刪除時)和清除操作(當索引記錄被物理刪除時)啟用或禁用緩衝。更新操作是插入操作和刪除操作的組合。innodb_change_buffer的預設值為all。

允許的innodb_change_buffer值包括如下所示:
.all
預設值:緩衝區插入、刪除標記操作和清除操作

.none
不緩衝任何操作

.inserts
緩衝插入操作。

.deletes
緩衝delete-marking操作

.changes
緩衝插入和刪除標記操作

.purges
緩衝發生在後臺的物理刪除操作

你可以在MySQL選項檔案(my.cnf或my.ini)中設定innodb_change_buffer引數,或者使用set GLOBAL命令動態修改,這需要超級許可權。更改設定會影響新操作的緩衝;現有緩衝項的合併不會受到影響。

配置更改緩衝區的最大大小
從MySQL5.6.2開始,innodb_change_buffer_max_size配置選項允許你配置變更緩衝區的最大大小佔緩衝池總大小的百分比。預設情況下,innodb_change_buffer_max_size設定為25。最大值為50。

你可以考慮在MySQL伺服器上增加innodb_change_buffer_max_size,增加大量的插入、更新和刪除活動,其中更改緩衝區的合併跟不上新的更改緩衝區條目,導致更改緩衝區達到其最大大小限制。

用典型的工作負載測試不同的設定,以確定最佳配置。innodb_change_buffer_max_size設定是動態的,允許您在不重啟伺服器的情況下修改該設定


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2886309/,如需轉載,請註明出處,否則將追究法律責任。

相關文章