my05_mysql检查点简述

简单描述一下mysql 检查点,对mysql数据库恢复的理解有所帮助。

数据库版本

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.11    |
+-----------+
1 row in set (0.00 sec)

检查点查看

mysql> show engine innodb statusG;
---
LOG
---
Log sequence number          25048841
Log buffer assigned up to    25048841
Log buffer completed up to   25048841
Log written up to            25048841
Log flushed up to            25048841
Added dirty pages up to      25048841
Pages flushed up to          25048841
Last checkpoint at           25048841
35 log i/o's done, 0.00 log i/o's/second
----------------------

Last checkpoint就是检查点的位置,在数据库并不繁忙的时候,可以看到Log sequence number,Log flushed,Pages flushed的位置接近或相等。当数据库DML操作较多时,它们的差值会变大。

相关参数

mysql数据库将内存中脏页刷新到磁盘时,记录一次检查点,也这是检查点的功能,刷新内存脏页到磁盘。innodb每秒或几秒都会自动刷新脏页,除此之外,它还受以下两个参数影响

mysql> show variables like '%max_dirty_pages%';
+--------------------------------+-----------+
| Variable_name                  | Value     |
+--------------------------------+-----------+
| innodb_max_dirty_pages_pct     | 50.000000 |
| innodb_max_dirty_pages_pct_lwm | 10.000000 |
+--------------------------------+-----------+
2 rows in set (0.00 sec)

当innodb脏页使用率超过innodb_max_dirty_pages_pct_lwm的值时,除innodb本身的自动刷新脏页机制外,会开始加速刷脏页,当脏页使用率超过innodb_max_dirty_pages_pct的值时,会再次提高刷新脏页的速度。

innodb_max_dirty_pages_pct_lwm为0表示该参数不生效。

检查点分类

Sharp Checkpoint(完全检查点)

将内存中所有脏页全部写到磁盘就是完全检查点,比如数据库实例关闭时。

Fuzzy Checkpoint(模糊检查点)
将部分脏页刷新到磁盘,就是模糊检查点,数据库实例运行过程产生的检查基本上就是这种类型的检查点。

检查点作用

主要作用就是减少数据恢复时间 。因为检查点位置之前的数据都写到磁盘上了,数据恢复便不需要再关注这部分数据,所以它减少了恢复的时间 。

常说的crash崩溃恢复,恢复的是哪些数据? 恢复的是Last checkpoint到Log flushedup之间的数据。Log flushedup是内存写日志的位置,也是日志文件最新的位置。再新的话就到内存中去了,还没有写入日志文件的数据是没法恢复的。

原文地址:https://www.cnblogs.com/perfei/p/9372664.html