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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

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

【redo log buffer】【redo log file】-原理

目錄:

1.重做日志寫入過程圖

2.相關(guān)知識點匯總圖

3.redo_log_buffer 原理

4.redo_log_file 原理

1. 重做日志寫入過程:

2. 相關(guān)知識點匯總:

3.?redo log buffer 原理

重做日志緩沖(redo log buffer)是Innodb存儲引擎的內(nèi)存區(qū)域中的一部分。

【重做日志信息--(1)-->redo log buffer--(2)-->重做日志文件】

在(2)中涉及知識:

<1>.關(guān)于innodb_log_buffer_size的大小:(默認(rèn)8M)

mysql> show variables like 'innodb_log_buffer_size%';

+------------------------+---------+

| innodb_log_buffer_size | 8388608 |

+------------------------+---------+

8388608(Byte)/1024/1024=8M

重做日志緩沖不需要設(shè)置的太大,只要保證每秒產(chǎn)生的事務(wù)量在緩沖大小范圍之內(nèi)。因為每秒都會刷新緩沖到日志文件。8M足夠了。

<2>.在以下三種情況下,會將重做日志緩沖中的內(nèi)容刷新到外部磁盤的重做日志文件中。

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

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

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

4. redo log file 原理

<1>.重做日志介紹

日志文件名:

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

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

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

日志文件組:

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

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

3.日志組中的文件大小是一致的,以循環(huán)的方式運行。文件1寫滿時,切換到文件2,文件2寫滿時,再次切換到文件1.

日志文件參數(shù):

1.innodb_log_file_size 重做日志文件的大小。

2.innodb_log_files_in_group 指定重做日志文件組中文件的數(shù)量,默認(rèn)2

3.innodb_mirrored_log_groups 指定了日志鏡像文件組的數(shù)量,默認(rèn)1

4.innodb_log_group_home_dir 指定日志文件組所在的路徑,默認(rèn)./ ,表示在數(shù)據(jù)庫的數(shù)據(jù)目錄下。

<2>.重做日志文件大小設(shè)置

太大:恢復(fù)時可能需要很長時間

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

錯誤日志警告信息:

InnoDB:ERROR:the age of the last checkpoint is 9433645,InnoDB:which exceeds the log group capacity 9433498.

解析:重做日志有個capacity變量,代表最后的檢查點不能超過這個閾值,如果超過,必須將緩沖池中臟頁列表(flush list)中的部分臟數(shù)據(jù)頁寫回磁盤,這是會導(dǎo)致用戶線程的阻塞。

<3>.二進(jìn)制日志和重做日志的對比:

1.類別

二進(jìn)制日志:記錄MySQL數(shù)據(jù)庫相關(guān)的日志記錄,包括InnoDB,MyISAM等其它存儲引擎的日志。

重做日志:只記錄InnoDB存儲引擎本身的事務(wù)日志。

2.內(nèi)容

二進(jìn)制日志:記錄事務(wù)的具體操作內(nèi)容,是邏輯日志。

重做日志:記錄每個頁的更改的物理情況。

3.時間

二進(jìn)制日志:只在事務(wù)提交完成后進(jìn)行寫入,只寫磁盤一次,不論這時事務(wù)量多大。

重做日志:在事務(wù)進(jìn)行中,就不斷有重做日志條目(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:每個重做日志的數(shù)據(jù)部分,恢復(fù)時需要調(diào)用相應(yīng)的函數(shù)解析。

<5>.寫入過程

1.重做日志信息 先寫入 重做日志緩沖 再按一定條件順序?qū)懭胫刈鋈罩疚募?#xff01;

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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。