MySQL之InnoDB中的redo日志類型詳解
1、背景
執(zhí)行我們的sql語句是在Buffer Pool中操作的,因?yàn)樗⑿碌酱疟P慢的原因可能不會立即同步到磁盤,當(dāng)系統(tǒng)崩潰時,肯定不能讓我們的操作丟失,但是Buffer Pool中的臟頁還未同步到磁盤,所以就要把操作Buffer Pool的這一過程更輕量的記錄下來并寫的磁盤,記錄下來的內(nèi)容就叫redo日志。
2、redo日志
【1】格式
redo日志的類型有很多種,每條日志的前面部分都是相同的,其通用結(jié)構(gòu)如下如圖所示:

字段含義如下:
| 字段 | 含義 |
|---|---|
| type | redo日志類型 |
| space ID | 表空間ID |
| page number | 頁號 |
| data | redo日志的具體內(nèi)容 |
【2】類型
redo日志類型常見的有如下幾種:
| 字段 | 十進(jìn)制數(shù) | 含義 |
|---|---|---|
| MLOG_1BYTE | 1 | 在頁面的某個偏移量處寫入1個字節(jié)的redo日志類型 |
| MLOG_2BYTE | 2 | 在頁面的某個偏移量處寫入2個字節(jié)的redo日志類型 |
| MLOG_4BYTE | 4 | 在頁面的某個偏移量處寫入4個字節(jié)的redo日志類型 |
| MLOG_8BYTE | 8 | 在頁面的某個偏移量處寫入8個字節(jié)的redo日志類型 |
| MLOG_WRITE_STRING | 30 | 在頁面的某個偏移量處寫入一串?dāng)?shù)據(jù)的redo日志類型 |
| MLOG_REC_INSERT | 9 | 插入一條使用非緊湊行格式記錄的redo日志類型 |
| MLOG_COMP_REC_INSERT | 38 | 插入一條使用緊湊行格式記錄的redo日志類型 |
| MLOG_COMP_PAGE_CREATE | 58 | 創(chuàng)建一個存儲緊湊行格式記錄的頁面的redo日志類型 |
| MLOG_COMP_REC_DELETE | 42 | 刪除一條使用緊湊行格式記錄的redo日志類型 |
| MLOG_COMP_LIST_START_DELETE | 44 | 刪除一系列使用緊湊行格式記錄的開頭redo日志類型 |
| MLOG_COMP_LIST_END_DELETE | 43 | 刪除一系列緊湊行格式記錄的結(jié)尾redo日志類型 |
| MLOG_ZIP_PAGE_COMPRESS | 51 | 壓縮一個數(shù)據(jù)頁的redo日志類型 |
| MLOG_MULTI_REC_END | 31 | 代表一組redo日志中的最后一條redo日志類型 |
接下來就大概講一下幾種redo日志類型結(jié)構(gòu), MLOG_1BYTE、 MLOG_2BYTE、 MLOG_4BYTE、 MLOG_8BYTE的結(jié)果如下:

MLOG_WRITE_STRING類型結(jié)構(gòu)如下:

MLOG_COMP_REC_INSERT類型結(jié)構(gòu)如下:

【3】組
像事務(wù)一樣,有的場景一組redo日志也具有原子性的特性,所以就有MLOG_MULTI_REC_END類型的redo日志來表示一組redo日志的最后一條,為了區(qū)分redo日志到底是單一的還是屬于某個組的,就將redo日志結(jié)構(gòu)中的type字段8字節(jié)分為前面1字節(jié)和后面7字節(jié),前面1字節(jié)為1就代表單一的redo日志,否則就為某個組的redo日志,后面7個字節(jié)用來表示redo日志類型。
【4】Mini-Transaction
訪問一組redo日志的過程叫做Mini-Transaction,一個事務(wù)可以包含多個語句,一個語句可以包含多個Mini-Transaction,一個Mini-Transaction包含多個redo日志,這就是它們之間的關(guān)系。
3、總結(jié)
本文主要簡單介紹了一下redo日志有哪幾種類型,還有一些其它的類型可以在網(wǎng)上大概查找了解一下。
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mysql8.4.3LTS中離線部署的實(shí)現(xiàn)示例
本文詳細(xì)介紹了在Ubuntu 24.04系統(tǒng)上離線部署MySQL 8.4.3 LTS,包括環(huán)境配置、安裝步驟等步驟,對小白有一定的幫助,感興趣的可以了解一下2024-11-11
MySQL學(xué)習(xí)之基礎(chǔ)命令實(shí)操總結(jié)
MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),在WEB應(yīng)用方面MySQL是最好的。本文將為大家詳細(xì)介紹一些MySQL的基礎(chǔ)命令,需要的可以參考一下2022-03-03
Mysql實(shí)驗(yàn)之使用explain分析索引的走向
索引是mysql的必須要掌握的技能,同時也是提供mysql查詢效率的手段。通過以下的一個實(shí)驗(yàn)可以理解?mysql的索引規(guī)則,同時也可以不斷的來優(yōu)化sql語句2018-01-01

