1.REDO LOG 是用來做資料庫crash recovery的,是保證資料庫數據正確性、完整性及持久性的重要機制之一。在資料庫操作中,它保存了對InnoDB表中數據的修改記錄,所以也叫日誌文件。 2.日誌文件內部也是按照大小相等的頁面切割,頁面大小為512個位元組(回顧下數據頁是多大? )。考慮到 ...
1.REDO LOG 是用來做資料庫crash recovery的,是保證資料庫數據正確性、完整性及持久性的重要機制之一。在資料庫操作中,它保存了對InnoDB表中數據的修改記錄,所以也叫日誌文件。
2.日誌文件內部也是按照大小相等的頁面切割,頁面大小為512個位元組(回顧下數據頁是多大? )。考慮到機械硬碟的塊大小也是512位元組,所以日誌塊也是如此設計。
解釋:這是因為寫日誌其實就是為了提高資料庫寫入吞吐量,如果每次寫入是磁碟塊大小的倍數,效率才是最高的,並且日誌將邏輯事務對資料庫的分散隨機寫入轉化成了順序的512位元組整倍數據的寫入,這樣就大大提高了資料庫的效率。
3.物理事務(Mini-transaction ,MTR)是相對邏輯事務而言的。(邏輯事務具有ACID四個特性,用來保證資料庫的完整性--要麼都做,要麼什麼都不做。)物理事務是對InnoDB存儲引擎而言的,在存儲引擎中,只要涉及到文件修改、文件讀取等物理操作,都離不開這個物理事務,可以說,物理事務是Buffer Pool中Page與文件中的一個橋梁。
4.InnoDB的REDO日誌不完全是物理日誌,它包含了部分邏輯意義。比如,插入一條記錄時,MTR記錄的是在一個頁面中寫入這條記錄,內容大致包括頁面號、文件號(表空間號)、以及這條記錄的值(包括每個列信息),這樣就有了邏輯概念。
5.一個邏輯事務由多個物理事務組成,用來保證資料庫的ACID特性。物理事務可以保證一次物理修改是完整的,即可以理解為一個底層的相對完整的操作。比如,在插入一條記錄的過程中,會包括寫一條回滾記錄及插入時寫入一個頁面等,那麼這些邏輯上是一個動作的物理寫入,就可以被認為是一個獨立的物理事務。
6.物理事務的作用過程:首先,在系統將一個頁面載入Buffer Pool時,需要一個新開始(mtr_start)或者一個已將開始的物理事務,載入時需要指定頁面的獲取方式,比如是用來讀取的還是用來修改的,根據獲取方式上鎖(寫,則上X鎖;讀,上S鎖),上鎖前,還需進行檢查,例如是否頁面已被上鎖,是否需要排隊等待等 。然後,當上鎖成功後,物理事務就會將這個頁面的記憶體結構存儲到memo動態數組中,然後這個物理事務就可以訪問這個頁面了。物理事務對頁面的訪問有兩種操作,一種是讀,另一種是寫。讀操作就是簡單讀取指定頁面內偏移及長度的數據。寫則是指定從某一偏移開始寫入指定長度的數據。同時,如果這個物理事務是寫日誌的,此時還需要對剛纔的寫操作記下日誌。最後,是物理事務的提交,主要是將這個物理事務產生的日誌寫入到InnoDB日誌系統的日誌緩衝區中,然後,等待時機(日誌刷盤機制),將緩衝區中的日誌數據刷到日誌文件中。
7.日誌緩衝區的存儲只是一個暫時的中間狀態,日誌緩衝區的大小可以通過參數innodb_log_buffer_size來設置。
8.日誌產生的作用,是將隨機頁面寫入變成順序日誌的寫入,從而用一個速度更快的寫入來保證速度較慢的寫入的完整性,已提高整體數據的性能。
9.REDO 日誌恢復 主要過程:(1)從日誌文件的固定位置找到最新的檢查點信息;(2)從最新的檢查點位置開始掃描日誌文件,做資料庫恢復。
10.InnoDB的REDO是在UNDO之前做的,是等到物理的資料庫操作都完成之後,才能在物理數據一致的基礎上去做一些邏輯的操作,即UNDO回滾操作。
-----主要部分內容參考梳理於網路知識,此僅為學習筆記,在此原創作者感謝!