两次写

来源:互联网 发布:高光谱遥感数据 编辑:程序博客网 时间:2024/06/10 08:26

参考:http://blog.csdn.net/youngsend/article/details/48606475

  1. doublewrite由两部分组成一部分是内存中的doublewrite buffer,大小为2MB另一部分是物理磁盘上共享表空间中连续的128个页,即2个区(extent),大小同样为2MB在对缓冲池的脏页进行刷新时,并不直接写磁盘,而是会通过memcpy函数将脏页先复制到内存中的doublewrite buffer,之后通过doublewrite buffer再分两次每次1MB顺序地写入共享表空间的物理磁盘上,然后马上调用fsync函数,同步磁盘,避免缓冲写带来的问题。在这个过程中,因为doublewrite页是连续的,因此这个过程是顺序写的,开销并不是很大。在完成doublewrite页的写入后,再将doublewrite buffer中的页写入各个表空间文件中此时的写入则是离散的。
  2. 如果操作系统在将页写入磁盘的过程中发生了崩溃,在恢复过程中,InnoDB存储引擎可以从共享表空间中的doublewrite中找到该页的一个副本,将其复制到表空间文件,再应用重做日志
  3. 有些文件系统本身就提供了部分写失效的防范机制,如ZFS文件系统。在这种情况下,用户就不要启用doublewrite了。

原创粉丝点击