阅读mysql checkpoint相关文档
This commit is contained in:
@@ -182,3 +182,23 @@ 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。
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user