日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql重做日志_MySQL-重做日志 redo log -原理

發(fā)布時間:2023/12/1 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql重做日志_MySQL-重做日志 redo log -原理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【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存儲引擎的內存區(qū)域中的一部分。

【重做日志信息--(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>.在以下三種情況下,會將重做日志緩沖中的內容刷新到外部磁盤的重做日志文件中。

Master Thread 每一秒將重做日志緩沖刷新到重做日志文件;

每個事務提交時會將重做日志緩沖刷新到重做日志文件;

當重做日志緩沖池剩余空間小于1/2時,重做日志緩沖刷新到重做日志文件。

4. redo log file 原理

<1>.重做日志介紹

日志文件名:

1.innodb_log_group_home_dir參數指定的目錄下有兩個文件:ib_logfile0,ib_logfile1

2.該文件被稱為:重做日志文件(redo log file),記錄Innodb存儲引擎的事務日志。至關重要!!!

3.例如:服務器意外宕機導致實例失敗,Innodb存儲引擎利用重做日志恢復到宕機前的狀態(tài),以此保證數據的完整性。

日志文件組:

1.每個Innodb存儲引擎至少有1個重做日志文件組,每個組至少包含2個重做日志文件(ib_logfile0,ib_logfile1).

2.可以通過設置多個鏡像日志組(mirrored log groups),將不同組放到不同磁盤,提高重做日志的高可用性。

3.日志組中的文件大小是一致的,以循環(huán)的方式運行。文件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>.重做日志文件大小設置

太大:恢復時可能需要很長時間

太小:可能導致一個事務需要多次切換重做日志文件;會導致async checkpoint,導致性能抖動。

錯誤日志警告信息:

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字節(jié))

space (壓縮后可能<4字節(jié))

page_no

redo_log_body

reod_log_type: 占用1字節(jié),表示重做日志類型。各種不同操作有不同的重做日志格式,但有基本的格式。

space:表空間的ID,采用壓縮的方式,占用空間可能小于4字節(jié)。

page_no:頁的偏移量,同樣采用壓縮方式

redo_log_body:每個重做日志的數據部分,恢復時需要調用相應的函數解析。

<5>.寫入過程

1.重做日志信息 先寫入 重做日志緩沖 再按一定條件順序寫入重做日志文件!

2.redo log buffer 向 redo log file 寫,是按512個字節(jié),也就是一個扇區(qū)的大小進行寫入。扇區(qū)是寫入的最小單位,一定能寫入成功,因此過程中不需要double write.

總結

以上是生活随笔為你收集整理的mysql重做日志_MySQL-重做日志 redo log -原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。