MySQL8.0后的double write有什么变化

什么是double write?

一部分是内存中的double write buffer ,大小为2MB(16k一个页,一共128个页)。
第二部分是磁盘共享表空间的128个数据页,在对脏页进行落盘的时候,并不是直接进行落盘,而是先复制到double write buffer,然后再分别写入到共享表空间,然后再写入表空间。

为什么要有双写机制?

页面的刷新会遇到部分写的问题,也就是说对于其中一个页面只写了一部分的内容,在数据库崩溃后,传统的数据库会使用redo log进行恢复,恢复的原理是通过redo对数据也进行重新进行物理操作,但是如果这个数据页本身发生了损坏,那innodb的页面大小是16KB,但是写入过程中只写了4KB(操作系统仅仅保证512字节写入的完整性),这个是时候因为页面不是完整的,因此不能通过redo来进行恢复。

Redo log中不包含完整的数据页(性能考虑),通常只包含对数据页的变更记录。
所以通过完好的原始数据页结合redo log中的记录,可以推断导出变更后的正确数据页,而一旦原始数据页损坏,则无法推导出正确的变更后的数据页。

redo恢复的前提条件是页是完整的。那么redo对其进行重做也是没有作用的,innodb的二次写,在写入的时候,创造了一个关于页的副本,这样即使在发生写失效后,也可以通过副本页,对还原重做。

双写是否会大大降低写性能?

通常不会,双写无疑会增加磁盘IO压力的,为了尽可能降低性能影响,双写在buffer落盘的时候,使用批量+顺序写的方式进行。假设要写入磁盘的数据页有64页,那么直接写数据文件会产生64次fsync,使用双写的情况下,假设双写Buffer落盘的批大小为64页,则落盘只需要1次fsync(总体fync加1),并且双写Buffer落盘是顺序写文件,也保障了文件写入的性能。所以通常情况下,使用双写并不会大大降低写性能。

5.7和8.0的区别

5.7

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值