mysql二次写缓存

来源:互联网 发布:windows server iscsi 编辑:程序博客网 时间:2024/05/22 10:36

,二次写缓存是innodb在刷新buffer pool中的数据到正确的位置之前,把页写到了系统表空间的存储上。只有在写入到二次写缓存后,innodb才会将页写入到合适的位置,如果操作系统或mysqld进程在写页的中途crash了,那么innodb在二次写缓存中能找到一个好的拷贝用来恢复。5.6的默认页大小是16k,现在很多的磁盘的块大小是4k,一次io的大小是io_chunk_size的大小,跟磁盘的块大小没有关系,也就是说一次io可以是4k,可以是8k等,这种情况下,一次innodb页可能需要几次io操作,这种情况下一个页在写入的中途,可能发生错误。如果一次io能写入16k一个页的大小,那么就不会有这个问题(个人理解)。
尽管数据要被写2次,但是io消耗并不是要额外的2倍,数据在写入二次写缓存的时候是大的连续的chunk,使用fsync()调用,可以使用innodb_doublewrite设置成0来禁用。
oracle中也会有数据块出现不一致的情况,oracle处理的方式是冻结数据块在redo,使用redo前滚重构块。oracle在是通过对比数据块中的开始scn+seq和结尾的版本号进行对比,如果不一致说明数据块是不一致的,Checksums allow Oracle to detect corruption caused by underlying disks, storage systems, or I/O systems.

原创粉丝点击