double write原理图如下:
通过引入doublewrite buffer的方案,每次innodb在准备写出一个page时,先把page写到doublewrite buffer中.如果在写doublewrite buffer时,发生了意外,但是数据文件中的原来的page不受影响,这样在下次启动时,可以通过innodb的redolog进行恢复.如果在写doublewrite buffer成功后,mysql会把doublewrite buffer的内容写到数据文件中,如果在这个过程又出现了
意外,没有关系,重启后mysql可以通过从doublewrite buffer找到好的page,再用该好的page去覆盖磁盘上坏的page即可。
所以在正常的情况下,mysql写数据page时,会写两遍到磁盘上,第一遍是写到doublewrite buffer,第二遍是从doublewrite buffer写到真正的数据文件中.
为了解决 partial page write问题 ,当mysql将脏数据flush到data file的时候,先使用memcopy将脏数据复制到内存中的double write buffer,通过double write buffer再分2次,每次写入1MB到共享表空间,然后马上调用fsync函数,同步到磁盘上,避免缓冲带来的问题。
两次写需要额外添加两个部分:
1)内存中的两次写缓冲(doublewrite buffer),大小为2MB
2)磁盘上共享表空间中连续的128页,大小也为2MB。其中120个用于批量写脏页,另外8个用于Single Page Flush。做区分的原因是批量刷脏是后台线程做的,不影响前台线程。而Single page flush是用户线程发起的,需要尽快的刷脏页并替换出一个空闲页出来。
相关参数解释:
(root@localhost)-[11:35:25]-[(none)]>show status like "%InnoDB_dblwr%";
+----------------------------+-----------+
| Variable_name | Value |
+----------------------------+-----------+
| Innodb_dblwr_pages_written | 882384812 |
| Innodb_dblwr_writes | 61236457 |
+----------------------------+-----------+
2 rows in set (0.01 sec)
InnoDB_dblwr_pages_written doublewrite写的页的总数
InnoDB_dblwr_writes doublewrite写的文件的次数
因为脏页刷新到磁盘的写入单元小于单个页的大小,如果在写入过程中数据库突然宕机,可能会使数据页的写入不完成,
造成数据页的损坏。而redo log中记录的是对页的物理操作,如果数据页损坏了,通过redo log也无法进行恢复。
所以为了保证数据页的写入安全,引入了double write。double write的实现分两个部分,一个是缓冲池中2M的内存块
大小,一个是共享表空间中连续的128个页,大小是2M。脏页从flush list刷新时,并不是直接刷新到磁盘而是先调用
函数(memcpy),将脏页拷贝到double write buffer中,然后再分两次,每次1M将double write buffer 刷新到
磁盘double write 区,之后再调用fsync操作,同步到磁盘。
如果是写doublewrite buffer本身失败,那么这些数据不会被写到磁盘,innodb此时会从磁盘载入原始的数据,然后通过innodb的事务日志来计算出正确的数据,重新 写入到doublewrite buffer。
如果应用在业务高峰期,
innodb_dblwr_pages_written:innodb_dblwr_writes远小于64:1,则说明,系统写入压力不大。
虽然,double write buffer刷新到磁盘的时候是顺序写,但还是是有性能损耗的。
如果系统本身支持页的安全性保障(部分写失效防范机制),如ZFS,那么就可以禁用掉该特性(skip_innodb_doublewrite)。
mysql innodb double write概念汇总
来源:这里教程网
时间:2026-03-01 11:53:25
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- mysql innodb double write概念汇总
mysql innodb double write概念汇总
26-03-01 - 巧用这19条MySQL优化,效率至少提高3倍
巧用这19条MySQL优化,效率至少提高3倍
26-03-01 - 沃趣微讲堂 | PXC、MGC&MGR原理与实践对比(八):PXC、MGC和MGR crash recovery
- SQL Server建立dblink至MySQL
SQL Server建立dblink至MySQL
26-03-01 - 埋在 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
