09 | 普通索引和唯一索引,應該怎么選擇?

問題:如果某次寫入使用了 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ù),就是另外一個過程了。

感謝極客時間:https://time.geekbang.org/column/article/70848

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容