<p class="intro">为什么MySQL引入Double Writer? ㈠ 是什么 double writer是ibdata1(共享表空间)里面的一块连续空间 BTW:为什么取名时叫buffer呢?难道一切缓冲写都叫buffer,加速读叫cache,哈哈 ㈡ 为什么需要 redo有效应用的前提是data的一致性,当data flush到磁盘时发生</p> 为什么MySQL引入Double Writer?<br><span>㈠ 是什么<br> <br> double writer是ibdata1(共享表空间)里面的一块连续空间<br> BTW:为什么取名时叫buffer呢?难道一切缓冲写都叫buffer,加速读叫cache,哈哈<br> <br>㈡ 为什么需要<br> <br> redo有效应用的前提是data的一致性,当data flush到磁盘时发生故障,比如16K只写了4K<br> 并且redo条目是change vector形式,属于逻辑记录,那么在InnoDB recovery时,redo就不知道从哪开始跑起<br> 简言之,就是为了解决部分写问题(partial page write)<br> <br>㈢ 影响性能吗<br> <br> 第一阶段,data写到double writer buffer属于顺序IO,节省IO开销<br> 第二阶段,因为double writer buffer积累了很多dirty page,再写向真正的位置时有可能合并,减少fsync()次数<br> 故,对性能影响不大<br> <br>㈣ 相关参数<br> <br> ① show variables like '%double%'; ② show status like '%innodb_dblwr%'; <br> <br>参考资料:<br>http://www.orczhou.com/index.php/2010/02/innodb-double-write/<br> <br><br><br>By 迦夜<br>2013-10-26<br>Good Luck </span>