阅读mysql文档

This commit is contained in:
asahi
2024-12-02 20:46:50 +08:00
parent 720230cd82
commit 864e4a3f43

View File

@@ -208,11 +208,14 @@ LSN为Log Sequence Number该值不断递增代表了和`redo log`中操作
LSN在innodb内部被使用用于`crash recovery`和管理缓冲池。LSN长度为8字节 LSN在innodb内部被使用用于`crash recovery`和管理缓冲池。LSN长度为8字节
> 位于`checkpoint`之前的变更都已经被写入到磁盘中
### 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语句处理`
`crash recovery`的过程中innodb会查找已经写入到log file中的checkpoint位于checkpoint之前的内容已经被全部写入到数据库的磁盘文件中innodb会扫描checkpoint之后的内容并且将log file中的修改都应用到数据库中。 `crash recovery`的过程中innodb会查找已经写入到log file中的checkpoint位于checkpoint之前的内容已经被全部写入到数据库的磁盘文件中innodb会扫描checkpoint之后的内容并且将log file中的修改都应用到数据库中。
> 如果数据库事务发生宕机且缓冲池中存在部分变更尚未被写入到磁盘那么数据库实例重启之后会查看redo log日志中位于`checkpoint`之后的内容,并且将`checkpoint`之后的变更写入到磁盘中。
### checkpoint种类 ### checkpoint种类
innodb内部使用Fuzzy Checkpoint进行页的刷新只会将一部分的脏页刷新到磁盘。 innodb内部使用Fuzzy Checkpoint进行页的刷新只会将一部分的脏页刷新到磁盘。
@@ -229,3 +232,24 @@ innodb中存在如下集中类型的fuzzy checkpoint
#### FLUSH_LRU_LIST_CHECKPOINT #### FLUSH_LRU_LIST_CHECKPOINT
在innodb中需要保证LRU中有一定数量的空闲页如果空闲页少于该数量那么innodb会将位于LRU尾端的页面淘汰。如果被淘汰页中存在脏页那么对这些脏页需要执行checkpoint操作。 在innodb中需要保证LRU中有一定数量的空闲页如果空闲页少于该数量那么innodb会将位于LRU尾端的页面淘汰。如果被淘汰页中存在脏页那么对这些脏页需要执行checkpoint操作。
`flush_lru_list_checkpoint`操作在单独的page cleaner线程中被执行可以通过`innodb_lru_scan_depth`来控制lru中可用页的数量该值默认为`1024`
#### Async/Sync Flush Checkpoint
定义如下变量:
```
checkpoint_age = redo_lsn - checkpoint_lsn
async_water_mark = 0.75 * total_redo_log_file_size
sync_water_mark = 0.9 * total_redo_log_file_size
````
假设定义了2个redo log文件并且每个文件大小为1G那么`total_redo_log_file_size`的大小为2G.
那么,`async_water_mark`为`1.5G``sync_water_mark`为`1.8G`.
- 当`checkpoint_age < async_water_mark`时,不需要触发任何刷新操作
- 当`async_water_mark < checkpoint_age < sync_water_mark`时,触发`async flush`从flush列表中刷新`足够`的脏页回磁盘
> 刷新足够脏页回磁盘,是指刷新后满足`checkpoint_age < sync_water_mark`
- `checkpoint_age > sync_water_mark`,会触发`sync_water_mark`,刷新足够的脏页回磁盘
`sync/async flush checkpoint`操作同样放入到了page cleaner线程中不会阻塞用户操作