Skip to content

MySQL InnoDB Doublewrite Buffer 两次写 Note #54

Open
@Shellbye

Description

@Shellbye

概念解释

1.Page(页)

PageMySQL里面磁盘( data files)和内存(buffer pool)交换数据的基本单位,一个Page可以包含一行或多行数据。MySQL里面的Page默认大小是16K,而很多操作系统磁盘操作的基本单位是4K,所以MySQL里面的Page在写入磁盘时需要多次磁盘IO,因此就会可能会出现一个问题叫Partial page write

2.Partial page write(部分写失效)

Partial page write出现的根本原因就是操作系统的磁盘IO操作的基本单位和MySQL的磁盘操作基本单位不一致,导致MySQL里面的Page在写入磁盘时需要多次磁盘IO,而当在多次IO之间系统发生宕机(比如断电),就产生了数据不一致的问题,即磁盘里只存储了部分数据(比如前4K),即Partial page write

Doublewrite(两次写)

为了避免出现Partial page writeMySQL引入Doublewrite BufferDoublewrite的过程可以用下面的图进行简单的说明
innodb_doublewrite
当有Page需要刷新到磁盘时(图中左上方两个Page),先使用memcopy把数据复制到内存中的Doublewrite Buffer,然后从Doublewrite Buffer以顺序的读写方式分两次刷新到共享表空间(位于磁盘)上,然后在进行真正的磁盘刷新操作,刷新到磁盘文件中。

参考

1.http://www.cnblogs.com/TeyGao/p/9236208.html
2.https://dev.mysql.com/doc/refman/5.7/en/innodb-doublewrite-buffer.html
3.https://stackoverflow.com/questions/37805316/what-is-a-tablespace-and-why-is-it-used

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions