双写机制
问题的呈现
在产生数据库宕机时,可能 Innodb 正在写入某个页到表中,然而这个页只写了一部分,这种状况被称为局部写生效,尽管 innodb 会先写重做日志, 在批改页,然而重做日志中记录的是对页的物理操作,然而如果这个页自身曾经产生了损坏,对页进行重做是没有意义的
<!– more –>
双写的呈现
为了解决这个问题,提出了双写机制
双写原理
双写 (doublewrite) 由两局部组成,一部分是内存中的 doublewrite buffer,大小为 2M,另一部分是屋里磁盘上共享表空间中间断的 128 个页,大小也是 2M。再对缓冲池中的脏页进行刷新时,并不间接写磁盘,而是会通过 memcpy 函数将脏页复制到内存中的 doublewrite buffer,之后通过 doublewrite buffer 再分两次,每次 1M 程序地写入共享表空间的物理磁盘上,而后马上调用 fync 函数,同步磁盘,防止缓冲写带来的问题
-- 查看 doublewrite 的运行状况
show global status like 'innodb_db%' \G
*************************** 1. row ***************************
Variable_name: Innodb_dblwr_pages_written 双写页数
Value: 98848391
*************************** 2. row ***************************
Variable_name: Innodb_dblwr_writes 写入次数
Value: 9607931
https://zhhll.icu/2021/ 数据库 / 关系型数据库 /MySQL/ 进阶 /31. 双写机制 /
本文由 mdnice 多平台公布