美文网首页
MySQL如何保证crash-safe的?

MySQL如何保证crash-safe的?

作者: 摸摸脸上的胡渣 | 来源:发表于2020-03-03 17:55 被阅读0次

    背景知识

    可以先看一下我写的为什么需要两阶段提交,两阶段提交+redo log保证了crash-safe

    疑问

    两阶段提交是流程上的保证,但是在向redo log(位于内存中的log buffer)中写数据后,如何保证redo log向磁盘写入成功呢?

    Linux背景知识

    在向磁盘写数据时,一般都会先把数据写进内存内核态中的page cache,然后再调用fsync()函数进行数据的刷盘。
    所以针对应用程序向磁盘写数据,一般是这样的流程


    image.png

    其中涉及到了三个存储数据的位置,分别是

    1. 用户内存 xxx buffer
    2. 内核态内存 page cache
    3. 磁盘

    通过参数配置

    使用innodb_flush_log_at_trx_commit进行相应的配置。
    严格程度由弱到强分别是
    0:写到用户态 xxx buffer
    2:写到内核态内存 cache page
    1:直接写到硬盘中

    一般为了数据的不丢失,都会选择1,但也会导致性能有所下降。

    相关文章

      网友评论

          本文标题:MySQL如何保证crash-safe的?

          本文链接:https://www.haomeiwen.com/subject/njnhlhtx.html