doc: 阅读innodb文档

This commit is contained in:
asahi
2025-07-08 12:47:42 +08:00
parent 301102efe6
commit 3a808113ba
2 changed files with 20 additions and 2 deletions

View File

@@ -333,7 +333,7 @@ redo log类似循环队列checkpoint之前的位置都已经被刷新到磁
### LSN ### LSN
LSN(log sequence number)为日志序列号, 是一个全局单调递增的64位整数`类似于innodb内部的逻辑时钟是全局唯一的` LSN(log sequence number)为日志序列号, 是一个全局单调递增的64位整数`类似于innodb内部的逻辑时钟是全局唯一的`
LSN随着redo log的不断产生而单调递增。当发生数据的修改时会生成redo log此时LSN也会增加。 LSN代表写入redo log的字节数总量随着redo log的不断产生而单调递增。当发生数据的修改时会生成redo log此时LSN也会增加。
### Fuzzy Checkpoint ### Fuzzy Checkpoint
innodb中实现了fuzzy checkpoint机制会基于小批量small batches来将buffer pool中的页刷新到磁盘中。`并不需要在一次batch中将buffer pool中的页都刷新到磁盘中否则checkpoint过程会中断用户的sql语句处理` innodb中实现了fuzzy checkpoint机制会基于小批量small batches来将buffer pool中的页刷新到磁盘中。`并不需要在一次batch中将buffer pool中的页都刷新到磁盘中否则checkpoint过程会中断用户的sql语句处理`

View File

@@ -169,8 +169,26 @@ log group只是一个逻辑上的概念由多个redo log file组成。log gro
redo log buffer会在如下时机将log block刷新到磁盘中 redo log buffer会在如下时机将log block刷新到磁盘中
- 事务提交时 - 事务提交时
- log buffer中有一半的内存空间已经被使用时 - 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中其前2KB4个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部分根据重做日志类型的不同会存储不同内容。