第二節 日志系統
一條update陳述句的更新程序
- 首先讓與這個表有關的所有快取全都失效
- 其余與查詢流程基本相似,但是還涉及到兩個重要的日志模塊-redo log和binlog
redo log(重做日志)
介紹
由于讀寫磁盤是一件非常費時間的事情,因此當記錄需要更新的時候,InnoDB會先將其寫到redo log里面,等redolog寫滿了,或者系統空閑的時候再寫磁盤,
實作原理
注意redo log的大小是固定的,不可追加寫入
具體的實作原理是維護了checkpoint和write pos兩個指標,并維護一個回圈陣列,其中checkpoint和write pos之間的就是沒有被寫入磁盤的部分,
crash-safe
有了redo log,即使資料庫發生例外重啟,之前的記錄也不會消失(因為有日志在),這個能力叫做crash-safe
binlog
介紹
redo log是引擎層的日志檔案,與之對應的,server層也有自己的日志系統,叫做binlog(歸檔日志)
對比redo log
- redo log是物理日志,記錄的是"在資料頁上做了什么修改";binlog是邏輯日志,記錄的是這個陳述句的原始邏輯,例如在ID=2這一行的c欄位+1
- redo log是固定大小回圈寫入的,而binlog是可以追加寫入的,
關于有了redo log之后為什么還有bin log
最主要的原因還是功能不同,redolog主要做資料恢復,binlog主要做資料歸檔
日志檔案讀寫流程
這里有兩個比較有意思的地方,第一個是redolog在binlog之前寫入,第二個是redolog分了兩階段提交,第一個其實好理解,因為雖然請求是先到server層,但是是在引擎中被執行的,
第二個并不是很好理解,需要解釋一下
兩階段提交
這個問題很大,教程中說是考慮保持兩份日志的邏輯一致,但感覺并沒有講明白
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/288478.html
標籤:其他
