redo log && undo log

介紹之前先介紹一下下面一條sql的執(zhí)行過程

update table set a=a+1 where id=1;

具體執(zhí) 流程:

  1. 調(diào)用存儲引擎接 ,找到id=1這 條記錄。如果數(shù)據(jù)在內(nèi)存中直接返回,否則先從磁盤中讀到內(nèi)存,然后返回

  2. 執(zhí)行器+1,

  3. 數(shù)據(jù)寫入內(nèi)存,同時記錄redo log

  4. 執(zhí)行器寫入binlog,寫入磁盤

  5. redo log 更新為commit。

image.png

redo log 總結(jié)

? 當數(shù)據(jù)庫對數(shù)據(jù)做修改的時候,需要把數(shù)據(jù)頁從磁盤讀到buffer pool中,然后在buffer pool中進行修改,那么這個時候buffer pool中的數(shù)據(jù)頁就與磁盤上的數(shù)據(jù)頁內(nèi)容不一致,稱buffer pool的數(shù)據(jù)頁為dirty page 臟數(shù)據(jù),如果這個時候發(fā)生非正常的DB服務(wù)重啟,那么這些數(shù)據(jù)還沒在內(nèi)存,并沒有同步到磁盤文件中(注意,同步到磁盤文件是個隨機IO),也就是會發(fā)生數(shù)據(jù)丟失,如果這個時候,能夠在有一個文件,當buffer pool 中的data page變更結(jié)束后,把相應(yīng)修改記錄記錄到這個文件(注意,記錄日志是順序IO),那么當DB服務(wù)發(fā)生crash的情況,恢復(fù)DB的時候,也可以根據(jù)這個文件的記錄內(nèi)容,重新應(yīng)用到磁盤文件,數(shù)據(jù)保持一致。
? 這個文件就是redo log ,用于記錄 數(shù)據(jù)修改后的記錄,順序記錄。

undo log 總結(jié)

undo日志用于存放數(shù)據(jù)修改被修改前的值,假設(shè)修改 tba 表中 id=2的行數(shù)據(jù),把Name=’B’ 修改為Name = ‘B2’ ,那么undo日志就會用來存放Name=’B’的記錄,如果這個修改出現(xiàn)異常,可以使用undo日志來實現(xiàn)回滾操作,保證事務(wù)的一致性。

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

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

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