doubleWrite的目的(是顺序写,但不是dio,redo才是DIO)
- 1.redo是物理逻辑日志,通过物理定位到page,然后记录在page上面的逻辑
- 2.redo无法替代doublewrite的原因在于,当发生partial page的时候redo无法操作
partial page
- 1.比如我们写一个完整的页之前会修改页头的checSum,然后写到一半断电了,则页头和页尾的checkSum不同,因此导致页校验不通过
- 2.而redo日志重做的时候 页头的checkSum和页尾的checkSum只能依次增加 永远不能相等,所以需要完整的替换该页。
double write的原理
- 1.double write 一部分在内存中的double write buffer大小为2MB
- 2.还有一部分在共享表空间的128个页--2MB
- 3.当我们从LRU或者FLUSH链表拿到脏页准备刷新的时候,是将他们内容通过memcpy函数复制到doublewrite buffer
- 4.然后double write buffer 分两次1MB顺序地写入共享表空间的磁盘,然后调用Fsync函数同步。因为是顺序所以性能损耗不大
- 5.如果doublewrite 发生partial page,直接抛弃使用对应的redo恢复。当两次顺序写结束,innodb再开始随机写入我们对应的数据页
网友评论