为什么需要double write ?
说直白点就是提高数据的安全性,解决部分写问题。
在数据写失败时会有一下2种情况。
-如果是写doublewrite buffer本身失败,那么这些数据不会被写到磁盘,innodb此时会从磁盘载入原始的数据,然后通过innodb的事务日志来计算出正确的数据,重新 写入到doublewrite buffer
-如果 doublewrite buffer写成功的话,但是写磁盘失败,innodb就不用通过事务日志来计算了,而是直接用double write buffer的数据再写一遍.
-在恢复的时候,innodb直接比较页面的checksum,如果不对的话,就从硬盘载入原始数据,再由事务日志 开始推演出正确的数据.所以innodb的恢复通常需要较长的时间.
double write 究竟是什么?
double write 是开辟在tablespace上的一块连续的空间,注意是连续的,所以他对性能的影响并不大。它是当mysql 需要把数据缓冲buffer pool 中将数据刷新到page时 ,需要先将数据fsync到double write 中,然后在需要的时候在将数据刷新到磁盘上的data file。需要注意的是double write 是表空间的一部分page,是物理上存在的,所以断电后任然存在。