基礎知識:資料都是先讀到記憶體中,然後修改記憶體中的資料,最後將資料寫回磁碟。
這裡把資料庫內容在磁碟上的部分叫data file,把資料庫內容在記憶體中的快取叫data buffer。data buffer與data file內容不同,此時把data buffer的內容叫髒資料,但是不能每次事務提交時都同步到磁碟,這樣磁碟io開銷太大,應該等到data buffer內資料比較多時再全部更新到磁碟。
這裡把日誌磁碟上的檔案叫log file,把日誌在記憶體上的快取叫log buffer。log buffer與log file內容也不同,但是日誌可以經常性地持久化到磁碟,因為日誌檔案是順序寫的,所以同步日誌的開銷遠比同步資料的開銷要小。
必須保證髒頁資料在同步到磁碟前,該資料頁相對應的日誌記錄已經重新整理到磁碟中。
每次執行事務,回滾日誌中記錄的是舊值,用於事務失敗時進行回滾,重做日誌中記錄的是新值,用於恢復那些宕機時未寫入data file的已成功事務。
undo是保證原子性,redo是保證持久化。
1. 事務開始時,記錄start t
2. 事務修改時,記錄(t,x,v),說明事務t操作物件x,x的值為v
3. 事務結束時,記錄commit t
回滾日誌的作用就是,當系統恢復時,掃瞄日誌發現有的事務只有開始標誌沒有提交標誌,就可以按照記錄的舊值,將這些未提交的事務回滾到未執行事務的狀態。
重做日誌的作用就是,當系統恢復後,可以根據重做日誌把已經提交的事務重做一遍。(或者說不是重做一遍,而是直接寫入記錄的新值就行了)
每次把data buffer裡的內容同步到data file中後,就會在日誌中記錄對應的檢查點,說明了這個檢查點之前的已提交事務都已經寫入磁碟,所以系統恢復後掃瞄日誌時只需要看檢查點後面的內容,可以加快恢復速度。
mysql回滾日誌
一 回滾日誌 undo log 1 作用 儲存了事務發生之前的資料的乙個版本,可以用於回滾,同時可以提供多版本併發控制下的讀 mvcc 也即非鎖定讀 2 內容 邏輯格式的日誌,在執行undo的時候,僅僅是將資料從邏輯上恢復至事務之前的狀態,而不是從物理頁面上操作實現的,這一點是不同於redo log...
MySQL重做日誌
用來實現事物的永續性,即事務acid中的d。重做日誌有兩部分組成 當事務commit時,必須將事務的全部日誌寫入重做日誌檔案進行持久化,待完成後事務commit的操作才算完成,即日誌前寫規則。為確保每次日誌都寫入到重做日誌檔案,在每次寫入後都進行一次fsync操作。因為重做日誌檔案沒有使用o dir...
mysql重做日誌
mysql預設情況下會有兩個檔案 ib logfile0和ib logfile1,這兩個檔案就是重做日誌檔案,或者事務日誌。重做日誌的目的 萬一例項或者介質失敗,重做日誌檔案就能派上用場。每個innodb儲存引擎至少有乙個重做日誌檔案組,每個檔案組下至少有2個重做日誌檔案,如預設的ib logfil...