MySQL · 源碼分析 ·Innodb 引擎Redo日誌存儲格式簡介

MySQL有多種日誌。不同種類、不同目的的日誌會記錄在不同的日誌文件中,它們可以幫助你找出mysqld內部發生的事情。比如錯誤日誌:用來記錄啓動、運行或停止mysqld進程時出現的問題;查詢日誌:記錄建立的客戶端連接和執行的語句;二進制日誌:記錄所有更改數據的語句,主要用於邏輯複製;慢日誌:記錄所有執行時間超過long_query_time秒的所有查詢或不使用索引的查詢。而對MySQL中最常用的事務引擎innodb,redo日誌是保證事務一致性非常重要的。本文結合MySQL版本5.6爲分析源碼介紹MySQL innodb引擎的重做(Redo)日誌存儲格式。

Redo日誌

任何對Innodb表的變動, redo log都要記錄對數據的修改,redo日誌就是記錄要修改後的數據。redo 日誌是保證事務一致性非常重要的手段,同時也可以使在bufferpool修改的數據不需要在事務提交時立刻寫到磁盤上減少數據的IO從而提高整個系統的性能。這樣的技術推遲了bufferpool頁面的刷新,從而提升了數據庫的吞吐,有效的降低了訪問時延。帶來的問題是額外的寫redo log操作的開銷。而爲了保證數據的一致性,都要求WAL(Write Ahead Logging)。而redo 日誌也不是直接寫入文件,而是先寫入redo log buffer,而是批量寫入日誌。當需要將日誌刷新到磁盤時(如事務提交),將許多日誌一起寫入磁盤。

Redo日誌文件格式

MySQL redo日誌是一組日誌文件,它們會被循環使用。Redo log文件的大小和數目可以通過特定的參數設置,詳見innodb_log_file_size 和 innodb_log_files_in_group 。

日誌組結構

在實現上日誌組是由定義在log0log.h中的log_group_t結構體來表示的。在日誌組結構體定義中含有以下重要信息: 日誌文件的大小(file_size):記錄日誌組內每個日誌文件的大小,通過參數innodb_log_file_size配置。 日誌文件的個數(n_files): 記錄這個日誌組中的文件個數,,通過參數innodb_log_files_in_group配置。 Checkpoint相關

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章