mysql双写是什么意思_MYSQL双写和块裂

什么时块裂呢?

这就涉及到OS(操作系统)的原子写的大小,一般情况下OS原子写是4K,硬盘一个扇区是512字节,4K需要写8个扇区。

假如写了4个扇区发生了断电,或者其他的意外,那么不就是丢失了另外4个扇区的数据吗?是另外2K字节没有写入!

这是OS和磁盘之间的故事,属于硬件工程师或者叫存储工程师操心的事,不过一般采用UPS或者是RAID卡上的电池来保证。

RAID卡10模式采用写两份来保证,RAID5 采用奇偶校验方式。

那么DATABASE(数据库) 与OS 这两者咋办呢?DATABASE MYSQL是16K一个数据页,ORACLE是8K一个块。远比OS4K原子写要大得多。

如何保证断电的时候数据页只写入了一半?

要么靠硬件来保证,要么靠软件机制来保证!

MYSQL 双写机制

当修改页的事务提交后,通过MEMCPY把该脏页复制到DOUBLE WRITE BUFFER中,DWB不是内存而是硬盘一个区域

它在共享表空间IBDATA分配的连续空间。大小2MB,分两个部分每个部分1MB,根据16K可以分128个页。

DWB 写满后或者刷脏行为,则把DWB写入数据文件中。

当断电时候,MYSQL会检查数据文件的页的CHECKSUM有问题,则从DWB拷贝完整的页来覆盖,然后再根据REDO恢复。

你可能感兴趣的:(mysql双写是什么意思)