diff --git a/mysql/mysql文档/innodb体系结构.md b/mysql/mysql文档/innodb体系结构.md index a19e561..a8cd43e 100644 --- a/mysql/mysql文档/innodb体系结构.md +++ b/mysql/mysql文档/innodb体系结构.md @@ -333,7 +333,7 @@ redo log类似循环队列,checkpoint之前的位置都已经被刷新到磁 ### LSN LSN(log sequence number)为日志序列号, 是一个全局单调递增的64位整数,`类似于innodb内部的逻辑时钟),是全局唯一的`。 -LSN随着redo log的不断产生而单调递增。当发生数据的修改时,会生成redo log,此时LSN也会增加。 +LSN代表写入redo log的字节数总量,随着redo log的不断产生而单调递增。当发生数据的修改时,会生成redo log,此时LSN也会增加。 ### Fuzzy Checkpoint innodb中实现了fuzzy checkpoint机制,会基于小批量(small batches)来将buffer pool中的页刷新到磁盘中。`并不需要在一次batch中将buffer pool中的页都刷新到磁盘中,否则checkpoint过程会中断用户的sql语句处理`。 diff --git a/mysql/mysql文档/mysql_事务.md b/mysql/mysql文档/mysql_事务.md index 0e1b6ab..0e92456 100644 --- a/mysql/mysql文档/mysql_事务.md +++ b/mysql/mysql文档/mysql_事务.md @@ -169,8 +169,26 @@ log group只是一个逻辑上的概念,由多个redo log file组成。log gro redo log buffer会在如下时机将log block刷新到磁盘中: - 事务提交时 - log buffer中有一半的内存空间已经被使用时 -- log checkpoint时 +- log checkpoint时(checkpoint时会导致脏页被刷新到磁盘上,而WAL要求脏页刷新前刷新redo log buffer) +在redo log buffer中的log block刷新到redo log file中时,其会追加(append)到redo log file的末尾。当redo log group中的一个文件被写满时,其会接着写入下一个redo log file,其行为称为`round-robin`。 +在redo log group中的每个redo log file中,其前2KB(4个log block大小)均不用于存储log block,前2KB内容如下: +- 对于log group中的第一个redo log file,前2KB用于存储如下内容,下列每个部分大小均为一个block: + - log file header + - checkpoint 1 + - 空 + - checkpoint2 +- 对于log group中`非第一个redo log file`,其仅保留开头2KB的空间,但并不保存信息 +#### redo log format +innodb中存储管理是基于页的,故而redo log format格式也基于页。 + +##### redo log头部格式 +redo log头部格式通常包含3部分: +- `redo_log_type`: 重做日志类型 +- space: 表空间id +- page_no: 页的偏移量 + +之后redo log body部分,根据重做日志类型的不同会存储不同内容。