問題:如果某次寫入使用了 change buffer 機制,之后主機異常重啟,是否會丟失 change buffer 和數(shù)據(jù) ?
這個問題的答案是不會丟失,留言區(qū)的很多同學都回答對了。雖然是只更新內(nèi)存,但是在事務提交的時候,我們把 change buffer 的操作也記錄到 redo log 里了,所以崩潰恢復的時候,change buffer 也能找回來。
在評論區(qū)有同學問到,merge 的過程是否會把數(shù)據(jù)直接寫回磁盤,這是個好問題。這里,我再為你分析一下。merge 的執(zhí)行流程是這樣的:
1、從磁盤讀入數(shù)據(jù)頁到內(nèi)存(老版本的數(shù)據(jù)頁);
2、從 change buffer 里找出這個數(shù)據(jù)頁的 change buffer 記錄 (可能有多個),依次應用,得到新版數(shù)據(jù)頁;
3、寫 redo log。這個 redo log 包含了數(shù)據(jù)的變更和 change buffer 的變更。
到這里 merge 過程就結束了。這時候,數(shù)據(jù)頁和內(nèi)存中 change buffer 對應的磁盤位置都還沒有修改,屬于臟頁,之后各自刷回自己的物理數(shù)據(jù),就是另外一個過程了。