配置InnoDB變更緩沖
配置innodb變更緩沖
當(dāng)在表上執(zhí)行INSERT、UPDATE和DELETE操作時,索引列的值(特別是輔助鍵的值)通常是無序的,這需要大量的I/O來更新輔助索引。InnoDB有一個更改緩沖區(qū),當(dāng)相關(guān)的輔助索引頁面不在緩沖池中時,它將緩存輔助索引的改變,這樣就不會立即從磁盤讀取頁面,從而避免了昂貴的I/O操作。當(dāng)頁面加載到緩沖池時,緩沖的更改將被合并,更新后的頁面稍后將刷新到磁盤。InnoDB主線程在服務(wù)器幾乎空閑的時候,或者在緩慢關(guān)閉的時候,合并緩沖的變更。
因為它可以減少磁盤讀寫,所以更改緩沖區(qū)特性對于I/O限制的工作負(fù)載最有價值,例如具有大量DML操作(如批量插入)的應(yīng)用程序。
但是,更改緩沖區(qū)占用了緩沖池的一部分,減少了可用來緩存數(shù)據(jù)頁的內(nèi)存。如果工作集幾乎可以放進(jìn)緩沖池,或者如果表的輔助索引相對較少,那么禁用更改緩沖可能會很有用。如果工作集完全適合緩沖區(qū),那么更改緩沖區(qū)不會帶來額外的開銷,因為它只應(yīng)用于不在緩沖池中的頁。
你可以使用innodb_change_buffering配置參數(shù)來控制InnoDB執(zhí)行改變緩沖的程度。您可以為插入、刪除操作(當(dāng)索引記錄最初被標(biāo)記為刪除時)和清除操作(當(dāng)索引記錄被物理刪除時)啟用或禁用緩沖。更新操作是插入操作和刪除操作的組合。innodb_change_buffer的默認(rèn)值為all。
允許的innodb_change_buffer值包括如下所示:
.all
默認(rèn)值:緩沖區(qū)插入、刪除標(biāo)記操作和清除操作
.none
不緩沖任何操作
.inserts
緩沖插入操作。
.deletes
緩沖delete-marking操作
.changes
緩沖插入和刪除標(biāo)記操作
.purges
緩沖發(fā)生在后臺的物理刪除操作
你可以在MySQL選項文件(my.cnf或my.ini)中設(shè)置innodb_change_buffer參數(shù),或者使用set GLOBAL命令動態(tài)修改,這需要超級權(quán)限。更改設(shè)置會影響新操作的緩沖;現(xiàn)有緩沖項的合并不會受到影響。
配置更改緩沖區(qū)的最大大小
從MySQL5.6.2開始,innodb_change_buffer_max_size配置選項允許你配置變更緩沖區(qū)的最大大小占緩沖池總大小的百分比。默認(rèn)情況下,innodb_change_buffer_max_size設(shè)置為25。最大值為50。
你可以考慮在MySQL服務(wù)器上增加innodb_change_buffer_max_size,增加大量的插入、更新和刪除活動,其中更改緩沖區(qū)的合并跟不上新的更改緩沖區(qū)條目,導(dǎo)致更改緩沖區(qū)達(dá)到其最大大小限制。
用典型的工作負(fù)載測試不同的設(shè)置,以確定最佳配置。innodb_change_buffer_max_size設(shè)置是動態(tài)的,允許您在不重啟服務(wù)器的情況下修改該設(shè)置
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。