我们知道InnoDB采用Write Ahead Log策略来防止宕机数据丢失,即事务提交时,先写重做日志,再修改内存数据页, 这样就产生了脏页。既然有重做日志保证数据持久性,查询时也可以直接从缓冲池页中取数据,那为什么还要刷新脏页 到磁盘呢?如果重做日志可以无限增大,同时缓冲池足够大,能够缓存所有数据,那么是不需要将缓冲池中的脏页刷新 到磁盘。但是,通常会有以下几个问题: 服务器内存有限,缓冲池不够用,无法缓存全部数据 重做日志无限增大成本要求太高 宕机时如果重做全部日志恢复时间过长 事实上,当数据库宕机时,数据库不需要重做所有的日志,只需要执行上次刷入点之后的日志。这个点就叫做Checkpoint, 它解决了以上的问题: 缩短数据库恢复时间 缓冲池不够用时,将脏页刷新到磁盘 重做日志不可用时,刷新脏页 重做日志被设计成可循环使用,当日志文件写满时,重做日志中对应数据已经被刷新到磁盘的那部分不再需要的日志可以被 覆盖重用。 InnoDB引擎通过LSN(Log Sequence Number)来标记版本,LSN是日志空间中每条日志的结束点,用字节偏移量来表示。 每个page有LSN,redo log也有LSN,Checkpoint也有LSN。可以通过命令show engine innodb status来观察: --- LOG --- Log sequence number 11102619599 Log flushed up to 11102618636 Last checkpoint at 11102606319 0 pending log writes, 0 pending chkp writes 15416290 log i/o's done, 12.32 log i/o's/second Checkpoint机制每次刷新多少页,从哪里取脏页,什么时间触发刷新?这些都是很复杂的。有两种Checkpoint,分别为: Sharp Checkpoint Fuzzy Checkpoint Sharp Checkpoint发生在关闭数据库时,将所有脏页刷回磁盘。在运行时使用Fuzzy Checkpoint进行部分脏页的刷新。 部分脏页刷新有以下几种: Master Thread Checkpoint FLUSH_LRU_LIST Checkpoint Async/Sync Flush Checkpoint Dirty Page too much Checkpoint Master Thread Checkpoint Master Thread以每秒或每十秒的速度从缓冲池的脏页列表中刷新一定比例的页回磁盘。这个过程是异步的,不会阻塞查询 线程。 FLUSH_LRU_LIST Checkpoint InnoDB要保证LRU列表中有100左右空闲页可使用。在InnoDB1.1.X版本前,要检查LRU中是否有足够的页用于用户查询 操作线程,如果没有,会将LRU列表尾端的页淘汰,如果被淘汰的页中有脏页,会强制执行Checkpoint刷回脏页数据到 磁盘,显然这会阻塞用户查询线程。从InnoDB1.2.X版本开始,这个检查放到单独的Page Cleaner Thread中进行, 并且用户可以通过innodb_lru_scan_depth控制LRU列表中可用页的数量,默认值为1024。 Async/Sync Flush Checkpoint 是指重做日志文件不可用时,需要强制将脏页列表中的一些页刷新回磁盘。这可以保证重做日志文件可循环使用。 在InnoDB1.2.X版本之前,Async Flush Checkpoint会阻塞发现问题的用户查询线程,Sync Flush Checkpoint会阻塞 所有查询线程。InnoDB1.2.X之后放到单独的Page Cleaner Thread。 Dirty Page too much Checkpoint 脏页数量太多时,InnoDB引擎会强制进行Checkpoint。目的还是为了保证缓冲池中有足够可用的空闲页。其可以通过 参数innodb_max_dirty_pages_pct来设置: mysql> show variables like 'innodb_max_dirty_pages_pct'; +----------------------------+-------+ | Variable_name | Value | +----------------------------+-------+ | innodb_max_dirty_pages_pct | 60 | +----------------------------+-------+
InnoDB脏页刷新机制
来源:这里教程网
时间:2026-03-01 11:52:45
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 埋在 MYSQL 数据库应用中的17个关键问题!
埋在 MYSQL 数据库应用中的17个关键问题!
26-03-01 - 阿里系统软件迎战“双11”超高流量峰值全纪录
阿里系统软件迎战“双11”超高流量峰值全纪录
26-03-01 - MySQL两阶段提交过程原理简述
MySQL两阶段提交过程原理简述
26-03-01 - InnoDB关键特性之自适应hash索引
InnoDB关键特性之自适应hash索引
26-03-01 - 3ds Max使用Blend混合材质制作电池
3ds Max使用Blend混合材质制作电池
26-03-01 - MySQL 中一个双引号的错位引发的血案
MySQL 中一个双引号的错位引发的血案
26-03-01 - 详细解析Maya的mental ray渲染阴森蛋洞
详细解析Maya的mental ray渲染阴森蛋洞
26-03-01 - MySQL架构与业务总结图
MySQL架构与业务总结图
26-03-01 - 举个栗子看如何做MySQL 内核深度优化
举个栗子看如何做MySQL 内核深度优化
26-03-01 - 3dmax融合后期制作超酷室外效果图
3dmax融合后期制作超酷室外效果图
26-03-01
