MySQL -- Innodb中的change buffer
change buffer是一種特殊的數據結構,當要修改的輔助索引頁不在buffer pool中時,用來cache對輔助索引頁的修改。對輔助索引頁的操作可能是insert、update和delete操作。等到相關的索引頁被讀入buffer pool中后,才會使用change buffer中的內容對輔助索引頁進行修改(即merge操作)。
輔助索引通常是不唯一的,插入輔助索引通常也是隨機的。同樣,對輔助索引的刪除、更新也通常是不連續的。
相關的索引頁被讀入buffer pool中后,才會使用change buffer中的內容對輔助索引頁進行修改(即merge操作)可以避免大量的磁盤隨機訪問I/O。
間歇性的,在系統空閑或關閉過程中,會執行purge操作,將新的索引頁寫入磁盤。purge操作一次寫多個索引值會比每次修改后就立即寫入磁盤的效率高。
對change buffer的merge可能需要好幾個小時,如果被更新的輔助索引行比較多。在merge過程中,磁盤的I/O會增加,可能會引起其他查詢的性能的降低。
merge操作也可能發生在事務提交后。事實上,即使在實例重啟后,還會可能發生merge操作。
在內存中,change buffer會占用buffer pool的空間;在物理磁盤上,change buffer是system tablespace的一部分,所以對索引的修改在數據庫重啟后仍然存在change buffer中。
change buffer包含的特性也叫作change buffering,包含insert buffering、delete buffering、purge buffering。
change buffer中數據類型和總量由參數innodb_change_buffering和innodb_chagne_buffer_max_size配置。查看change buffer中數據的信息,可以通過show engine innodb status查看。
change buffer在老版本中被稱作insert buffer。
MySQL
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。