MySQL-redo日志
2021-06-16 18:00:08 0 举报
MySQL redo日志相关知识整理图
作者其他创作
大纲/内容
<-- body
多个redo日志文件组成redo日志文件组
mtr
以它为中心
ib_logfile2
包含
情况2redo日志较小,没用完一个 log block body的空间的情况,假如使用了body的130字节,lsn=8716+130=8846
这两个是一样的为了避免图的污染复制了一份
属性名
长度(字节)
描述
LOG_CHECKPOINT_NO
8
checkpoint的编号,每做一次checkpoint加1
LOG_CHECKPOINT_LSN
checkpoint结束时对应的LSN值
LOG_CHECKPOINT_OFFSET
上个属性中的LSN值在redo日志文件组中的偏移量
LOG_CHECKPOINT_LOG_BUF_SIZE
做checkpoint操作时对应的log buffer的大小
LOG_BLOCK_CHECKSUM
4
该 block 的校验值
redo日志类型
表空间id
页号
redo日志内容
以下情景的时候,redo日志文件进行持久化:● log buffer空间不足时● 事务提交时● 后台线程不停的刷刷刷● 后台有一个线程,大约每秒都会刷新一次log buffer中的redo日志到磁盘。● 正常关闭服务器时● 做所谓的checkpoint时● 其他的一些情况...
MySQL-redo日志
log buffer ---> 由若干的连续的 redo log block 组成
*
表示block的校验值,用于正确性校验。
Mini-Transaction 关系图
type
space id
page number
data
lsn
redo log block 结构
redo日志
前2048字节(前4个block),存储管理信息
2048字节之后的部分,存储block镜像,普通block格式
情况2 buf_free位置,结束
1
buf_next_to_write
相关参数及命令:● SHOW VARIABLES LIKE 'datadir'查看redo日志文件位置● innodb_log_group_home_dir指定了redo日志文件所在的目录,默认值就是当前的数据目录。● innodb_log_file_size该参数指定了每个redo日志文件的大小,在MySQL 5.7.21中的默认值为48MB,● innodb_log_files_in_group该参数指定redo日志文件的个数,默认值为2,最大值为100。
名称
type对应值
介绍
MLOG_1BYTE
1字节
MLOG_2BYTE
2
2字节
MLOG_4BYTE
4字节
MLOG_8BYTE
8字节
MLOG_WRITE_STRING
30
一串数据
MLOG_REC_INSERT
9
表示插入一条非紧凑行格式的记录
MLOG_COMP_REC_INSERT
38
表示插入一条紧凑行格式的记录
MLOG_COMP_PAGE_CREATE
58
创建一个存储紧凑行格式记录的页面
MLOG_COMP_REC_DELETE
42
删除一条使用紧凑行格式记录
MLOG_COMP_LIST_START_DELETE
44
从某条给定记录开始删除
MLOG_COMP_LIST_END_DELETE
43
删除到某条记录位置,与上一条搭配使用
MLOG_ZIP_PAGE_COMPRESS
51
压缩一个数据页
……
ib_logfile……
情况3 buf_free位置,结束
情况1初始情况下,lsn值=8704+12=87168704是初始默认值12是第一个log block header占用的空间
总共的redo日志文件大小其实就是:innodb_log_file_size × innodb_log_files_in_group。redo日志文件 以 ib_logfile[数字] 格式命名
持久化到磁盘落地成redo日志文件
也是由若干个512字节的block组成
LOG_HEADER_FORMAT
redo日志的版本
LOG_HEADER_PAD1
字节填充用,无实际意义
LOG_HEADER_START_LSN
redo日志开始的 lsn 值
LOG_HEADER_CREATOR
32
redo日志文件创建者
lsn记录着写入 log buffer 的 redo日志 量。初始默认8704● 1. 系统第一次启动后初始化log buffer时,buf_free(就是标记下一条redo日志应该写入到log buffer的位置的变量)就会指向第一个block的偏移量为12字节(log block header的大小)的地方,那么lsn值也会跟着增加12● 2. 如果某个mtr产生的一组redo日志占用的存储空间比较小,也就是待插入的block剩余空闲空间能容纳这个mtr提交的日志时,lsn增长的量就是该mtr生成的redo日志占用的字节数● 3. 如果某个mtr产生的一组redo日志占用的存储空间比较大,也就是待插入的block剩余空闲空间不足以容纳这个mtr提交的日志时,lsn增长的量就是该mtr生成的redo日志占用的字节数加上额外占用的log block header和log block trailer的字节数
flushed_to_disk_lsn 和 lsn 类似,初始也是8704,其记录的是刷到磁盘的redo日志的字节数。
情况1 buf_free位置,结束
事务
buf_free 标志着当前redo日志写到的位置,此位置之后的是空闲的log buffer
log block header
12字节
log block body
496字节
log block trailer
ib_logfile0
redo日志大致格式
log file header
checkpoint1
没用
checkpoint2
描述redo日志文件整体属性
记录关于checkpoint的一些属性
暂未使用
同 checkpoint1
LOG_BLOCK_HDR_NO
每一个block都有的一个大于0的唯一标号
LOG_BLOCK_HDR_DATA_LEN
表示block中已经使用了多少字节,初始值为12(因为log block body从第12个字节处开始)如果log block body已经被全部写满,那么本属性的值被设置为512。
LOG_BLOCK_FIRST_REC_GROUP
该block中第一个mtr生成的redo日志记录组的偏移量
LOG_BLOCK_CHECKPOINT_NO
表示所谓的checkpoint的序号
buf_next_to_write 与 buf_free 之间的部分表示已经写入到 log buffer 中,但是没有刷新到磁盘的部分
ib_logfile1
情况3redo日志较大,500字节,跨block了,开始是在情况2的结束处,结束就是在第二个的body中了lsn=8846+500+4+12=9362
sql语句
Redundant是一种比较原始的行格式,它就是非紧凑的。而Compact、Dynamic以及Compressed行格式是较新的行格式,它们是紧凑的(占用更小的存储空间)。
ib_logfile3
redo日志文件组中的文件是循环写的
buf_next_to_write 之前的redo日志是已经刷新到磁盘的
名词
释义
redo日志会把事务在执行过程中对数据库所做的所有修改都记录下来,在之后系统崩溃重启后可以把事务所做的任何修改都恢复出来。
组
多个原子性操作redo日志的集合
Mini-Transaction
对底层页面中的一次原子性访问的过程,简称 mtr。一个事务可以包含若干条语句,每一条语句由若干个mtr组成,每一个mtr又可以包含若干条redo日志
redo log block
通过mtr生成的redo日志都放在了大小为512字节的block中
收藏
收藏
0 条评论
下一页