「这是我参与 2022 首次更文挑战的第 26 天,活动详情查看:2022 首次更文挑战」
形而上者谓之道;形而下者谓之器。
前言
前文讲述了 mysql
数据库 InnoDB
引擎关键特性-自适应哈希索引和异步IO,本文继续介绍 InnoDB
引擎的最后一个特性刷新邻接页以及数据库引擎的关闭和恢复参数。
刷新临接页
刷新临接页的工作原理为:当刷新一个脏页时,InnoDB
存储引擎会检测该页所在区(extent
)的所有页,如果有脏页的存在,那么一起进行刷新。这样的操作是显而易见的,可以将多个 IO
操作合并为一个操作,故该操作对于机械硬盘具有显而易见的优势。
# 可以通过配置来开启和关闭刷新邻接页
innodb_flush_neighbors=1
刷新邻接页的配置是否开启,需要考虑以下两个问题:
- 1 如果将内存中的脏数据页刷新到了数据库文件中,但是随后该数据页又被修改,则该数据页不应该刷新到磁盘中。
- 2 如果数据库服务的数据盘是固态硬盘,有较高的
IOPS
, 那么该特性需要根据条件进行开启。
InnoDB 的启动关闭和恢复
InnoDB
是 MySQL
数据库的引擎之一,因此引擎的启动和关闭,就是
# 改参数影响着表的存储引擎,该值得取值范围为 0、1、2。
# 默认的配置为1
innodb_fast_shutdown=1
- 0 表示数据库在关闭是,
InnoDB
引擎需要完成所有的full purge
和merge insert buffer
,并且将所有的脏页刷新到磁盘,这需要很长的时间来完成。如果需要InnoDB
引擎进行升级,必须将这个参数设置为 0,然后再关闭数据库。 - 1 表示不需要完成上述的操作:
full purge
和merge insert buffer
,但是在缓冲池中的一些数据脏页还是会刷新回磁盘。 - 2 表示不需要完成
full purge
和merge insert buffer
,也不需要将缓冲池中的数据脏页写会磁盘,而是将日志写入日志文件,这样不会有任何事务的丢失,但是下次数据库启动时,还是会进行恢复操作。
总结
本文介绍了 InnoDB
的关键特性刷新邻接页,以及引擎关闭和开启的参数设置对数据恢复的影响。