两次写是innodb的一个重要特性,目的是为了保证在异常down机或者没电的情况下,保证数据的安全可靠。一次是往内存的double write buffer中写,一次是在刷共享表空间的连续128个页。
为什么需要double write buffer?
innodb page一个页是64KB,而通常情况下都是一个页的一部分被修改,比如8KB,而其他的保持原状。而对于大多数Linux系统默认的block size是4KB,所以一个innodb page会被分成好多块,分别被刷
在没写入真正的ibd文件之前,double write buffer都是顺序写;当往ibd文件刷的时候才是离散写;查看double write运行情况可以用以下命令:
是否打开了double write:
show variables like "%double%";
查看double write的使用情况:
SHOW global STATUS LIKE "%innodb_dblwr%";
相当于每次write合并了Innodb_dblwr_pages_written/Innodb_dblwr_writes次Flush
当Innodb_dblwr_pages_written/Innodb_dblwr_writes 比例越大时说明DB的压力很小
关闭double buffer,在my.cnf中添加(生产中不建议这么做)
innodb_doublewrite=0