MySQL-重做日志 redo log -原理


【redo log buffer】【redo log file】-原理
目錄:
1.重做日志寫入過程圖
2.相關知識點匯總圖
3.redo_log_buffer 原理
4.redo_log_file 原理
 
1. 重做日志寫入過程:
 
 
 
2. 相關知識點匯總:
 
 3.  redo log buffer 原理
 
重做日志緩沖(redo log buffer)是Innodb存儲引擎的內存區域中的一部分。
【重做日志信息--(1)-->redo log buffer--(2)-->重做日志文件】
 
在(2)中涉及知識:
<1>.關於innodb_log_buffer_size的大小:(默認8M)
mysql> show variables like 'innodb_log_buffer_size%';
+------------------------+---------+
| innodb_log_buffer_size | 8388608 |
+------------------------+---------+
 
8388608(Byte)/1024/1024=8M
 
重做日志緩沖不需要設置的太大,只要保證每秒產生的事務量在緩沖大小范圍之內。因為每秒都會刷新緩沖到日志文件。8M足夠了。
 
<2>.在以下三種情況下,會將重做日志緩沖中的內容刷新到外部磁盤的重做日志文件中。
  1. Master Thread 每一秒將重做日志緩沖刷新到重做日志文件;
  2. 每個事務提交時會將重做日志緩沖刷新到重做日志文件;
  3. 當重做日志緩沖池剩余空間小於1/2時,重做日志緩沖刷新到重做日志文件。
 
4. redo log file 原理
<1>.重做日志介紹
     日志文件名:
          1.innodb_log_group_home_dir參數指定的目錄下有兩個文件:ib_logfile0,ib_logfile1
          2.該文件被稱為:重做日志文件(redo log file), 記錄Innodb存儲引擎的事務日志。至關重要!!!
          3.例如:服務器意外宕機導致實例失敗,Innodb存儲引擎利用重做日志恢復到宕機前的狀態,以此保證數據的完整性。
     日志文件組:
          1.每個Innodb存儲引擎至少有1個重做日志文件組,每個組至少包含2個重做日志文件(ib_logfile0,ib_logfile1).
          2.可以通過設置多個鏡像日志組(mirrored log groups),將不同組放到不同磁盤,提高重做日志的高可用性。
          3.日志組中的文件大小是一致的,以循環的方式運行。文件1寫滿時,切換到文件2,文件2寫滿時,再次切換到文件1.
     日志文件參數:
          1.innodb_log_file_size 重做日志文件的大小。
          2.innodb_log_files_in_group 指定重做日志文件組中文件的數量,默認2
          3.innodb_mirrored_log_groups 指定了日志鏡像文件組的數量,默認1
          4.innodb_log_group_home_dir 指定日志文件組所在的路徑,默認./ ,表示在數據庫的數據目錄下。
 
<2>.重做日志文件大小設置
  1. 太大:恢復時可能需要很長時間
  2. 太小:可能導致一個事務需要多次切換重做日志文件;會導致async checkpoint,導致性能抖動。
  3. 錯誤日志警告信息:
InnoDB:ERROR:the age of the last checkpoint is 9433645,InnoDB:which exceeds the log group capacity 9433498.
解析:重做日志有個capacity變量,代表最后的檢查點不能超過這個閾值,如果超過,必須將緩沖池中臟頁列表(flush list)中的部分臟數據頁寫回磁盤,這是會導致用戶線程的阻塞。
 
<3>.二進制日志和重做日志的對比:
     1.類別
     二進制日志:記錄MySQL 數據庫相關的日志記錄,包括InnoDB,MyISAM等其它存儲引擎的日志。
     重做日志:只記錄InnoDB存儲引擎 本身的事務日志
     2.內容
     二進制日志:記錄事務的具體操作內容, 是邏輯日志
     重做日志:記錄每個頁的更改的 物理情況
     3.時間
     二進制日志:只在事務提交完成后進行寫入, 只寫磁盤一次,不論這時事務量多大。
     重做日志:在事務進行中,就 不斷有重做日志條目(redo entry)寫入重做日志文件。
 
<4>.重做日志條目
     1.條目基本格式
redo_log_type (1字節) space (壓縮后可能<4字節) page_no redo_log_body
 
 
reod_log_type: 占用1字節,表示重做日志類型。各種不同操作有不同的重做日志格式,但有基本的格式。
space:表空間的ID,采用壓縮的方式,占用空間可能小於4字節。
page_no:頁的偏移量,同樣采用壓縮方式
redo_log_body:每個重做日志的數據部分,恢復時需要調用相應的函數解析。
 
<5>.寫入過程
     1.重做日志信息 先寫入 重做日志緩沖 再按一定條件順序寫入重做日志文件!
     2.redo log buffer 向 redo log file 寫,是按512個字節,也就是一個扇區的大小進行寫入。扇區是寫入的最小單位,一定能寫入成功,因此過程中不需要double write.
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM