阅读mysql checkpoint相关文档

This commit is contained in:
asahi
2024-11-25 20:40:33 +08:00
parent 4ce97c08b5
commit d689e04464

View File

@@ -182,3 +182,23 @@ redo log buffer在如下场景下会被刷新到文件中
- 每个事务提交时都会将redo log buffer刷新到磁盘文件中 - 每个事务提交时都会将redo log buffer刷新到磁盘文件中
- 当redo log buffer剩余空间小于一般时redo log buffer刷新到磁盘文件中 - 当redo log buffer剩余空间小于一般时redo log buffer刷新到磁盘文件中
## checkpoint
在innodb中对数据页的修改都是在缓冲池中完成的在对内存页进行修改后内存页和磁盘上的页内容不一致此时被称为`脏页`
在存在脏页时如果在脏页被刷新到磁盘时数据库发生宕机那么将会发生数据修改的丢失。为了解决该问题innodb采用了`write ahead log`策略即当事务提交时先写redo log再修改页。当发生数据丢失时可以通过redo log来完成数据的修复。
checkpoint解决了如下问题
- 缩短数据库恢复时间
- 缓冲池不够用时,将脏页刷新到磁盘
- redo log不可用时刷新脏页
### 缩短数据库恢复时间
通过checkpoint数据库并不需要在宕机重启之后对所有日志执行redo操作checkpoint之前的页都已经刷新到磁盘。故而数据库只需要对checkpoint之后的数据执行redo操作即可。
### 缓冲池不够用
当缓冲池不够用时LRU会进行页面淘汰此时被淘汰的页如果是脏页需要强制执行checkpoint将脏页刷新到磁盘中。
### redo log不可用
redo log类似循环队列checkpoint之前的位置都已经被刷新到磁盘中可以被覆盖使用。如果当redo log文件中所有的内容都未被刷新到磁盘中那么此时会强制触发checkpoint。