Mysql - InnoDB - 關(guān)于change buffer

一、change buffer是什么?

change buffer是一種特殊的數(shù)據(jù)結(jié)構(gòu),當(dāng)二級(jí)索引頁(yè)不在buffer pool中時(shí),它將更改緩存到二級(jí)索引頁(yè)。緩沖的更改(可能由INSERTUPDATEDELETE操作(DML)引起)稍后在其他讀操作將頁(yè)面加載到緩沖池時(shí)合并。

二、change buffer工作過(guò)程?

官網(wǎng)介紹圖:


image.png

聚簇索引不同的是,二級(jí)索引通常不是惟一的,并且二級(jí)索引的插入是以相對(duì)隨機(jī)的順序進(jìn)行的。類(lèi)似地,刪除和更新可能會(huì)影響索引樹(shù)中沒(méi)有鄰接位置的二級(jí)索引頁(yè)。稍后,當(dāng)其他操作將受影響的頁(yè)讀到緩沖池中時(shí),合并緩存的更改,可以避免從磁盤(pán)將次要索引頁(yè)讀到緩沖池中所需的大量隨機(jī)訪(fǎng)問(wèn)I/O。

purge操作會(huì)在系統(tǒng)大部分空閑或緩慢關(guān)閉期間定期將更新后的索引頁(yè)寫(xiě)入磁盤(pán)。與立即將每個(gè)值寫(xiě)入磁盤(pán)相比,purge操作可以更有效地將一系列索引值寫(xiě)入磁盤(pán)塊。

當(dāng)有許多受影響的行和許多次要索引需要更新時(shí),change buffer合并可能需要幾個(gè)小時(shí)。在此期間,磁盤(pán)I/O會(huì)增加,這可能導(dǎo)致磁盤(pán)綁定查詢(xún)的顯著減速。在事務(wù)提交后,甚至在服務(wù)器關(guān)閉和重啟后,更改緩沖區(qū)合并也可能繼續(xù)發(fā)生(更多信息請(qǐng)參見(jiàn)15.21.2節(jié)“強(qiáng)制InnoDB恢復(fù)”)。

在內(nèi)存中,change bufferbuffer pool的一部分。在磁盤(pán)上,change buffer系統(tǒng)表空間的一部分,當(dāng)數(shù)據(jù)庫(kù)服務(wù)器關(guān)閉時(shí),將在其中緩沖索引更改。

change buffer中緩存的數(shù)據(jù)類(lèi)型由innodb_change_buffering變量控制。有關(guān)更多信息,請(qǐng)參見(jiàn)配置更改緩沖。您還可以配置最大更改緩沖區(qū)大小。有關(guān)更多信息,請(qǐng)參見(jiàn)配置更改緩沖區(qū)最大大小。

如果次要索引包含降序索引列,或者主鍵包含降序索引列,則不支持更改緩沖。

關(guān)于變更緩沖區(qū)的常見(jiàn)問(wèn)題,請(qǐng)參見(jiàn)A.16節(jié)“MySQL 8.0 FAQ: InnoDB變更緩沖區(qū)”

更多詳細(xì)信息請(qǐng)參考change buffer官網(wǎng)介紹地址

未完待續(xù)......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容