【问题标题】:What is the difference between redo log and doublewirte buffer in MySql InnoDB?MySql InnoDB 中的重做日志和双写缓冲区有什么区别?
【发布时间】:2017-02-26 08:33:55
【问题描述】:

以前,我认为当崩溃发生时,重做日志是用来恢复数据库的。 但是当我看到如下注释时,我觉得我错了:

崩溃恢复

在崩溃后再次启动 MySQL 时发生的清理活动。对于 InnoDB 表,从 使用重做日志中的数据重播不完整的事务。之前提交的更改 崩溃,但尚未写入数据文件,从双写缓冲区重建。当数据库是 正常关机,此类活动在关机期间由清除操作执行。
在正常操作期间,提交的数据可以在更改缓冲区中存储一段时间,然后再被 写入数据文件。在保持数据文件最新之间总是需要权衡取舍,这引入了 正常操作期间的性能开销,以及缓冲数据,这可能会导致关机和崩溃 恢复需要更长的时间。 另请参阅更改缓冲区、提交、崩溃、数据文件、双写缓冲区、InnoDB、清除、重做日志。
它来自 mysql refman-5.7-en.pdf。

如果是真的,不知道redo log有什么用。因为,当崩溃发生时,mysql 可以通过双写缓冲区自行恢复。似乎重做日志没有意义。也许我忽略了某个地方,但我不知道。
我想知道它们之间的区别以及redo log对mysql InnoDB是否重要?

【问题讨论】:

    标签: mysql redo


    【解决方案1】:

    重做日志似乎在更低更关键的级别上运行。我使用 mySQL 作为桌面分析工具,所以我认为我不需要生产数据库保护。关闭双写缓冲 (innodb-doublewrite=0) 后,我发现查询性能显着提高。没问题,一年多了。重做日志是另一回事。在禁用它的一周内,我最终需要重建我的数据库。

    在 8.0.21 中,引入了切换重做日志 (ALTER INSTANCE ENABLE|DISABLE REDO_LOG) 的功能。 “为什么不试试呢?”我想。关闭后,我发现加载速度提高了 2-5%。

    这在加载大文件时会有所不同,尤其是在使用 Parallel Table Import Utility(在 8.0.17 中引入)时。

    不幸的是,我将 REDO LOG 禁用,并且在我写入表时在我的工作站上遇到了问题,最终得到了以下错误消息:

    [ERROR] [MY-013578] [InnoDB] Server was killed when Innodb Redo logging was disabled. Data files could be corrupt. You can try to restart the database with innodb_force_recovery=6
    

    我必须初始化一个新实例,因为在我收到此错误后,没有一个表允许我写任何东西。

    Force_recovery=6 是严格且只读的。我必须重建我的数据库(我每次导入表时都会重建),但是我必须手动恢复一些常量和历史表。

    This is documented on the mySQL page Redo Log documentation page.重做日志的警告得到一个阴影粗体警告标注。我应该听的。

    我仍然禁用重做日志,但仅从运行并行导入实用程序的 .js 代码内部:

    \sql
    SET GLOBAL local_infile = 1;
    ALTER INSTANCE DISABLE INNODB REDO_LOG;
    

    我总是在代码中启用它。我关闭了双写缓冲区,因为任何呈现部分的事务我都可以通过重新加载表来轻松纠正。

    【讨论】:

      【解决方案2】:

      也许这篇博文会回答你的问题:

      点击here

      【讨论】:

      • 尽量避免link only answers。链接很棒,但至少尝试提供您的原始内容来解释 OP 所询问的内容。
      • 谢谢。重做日志帮助我理解事务的 ACID 特性。重做日志实现或解决崩溃发生时的一致性。双写缓冲区也可以。区别在于
      • 不同的是他们处理的阶段不同。修改sql -> redo log -> 脏页(缓冲池) -> doublewrite buffer -> ibdata文件。
      • 我想我很困惑为什么 MySQL 需要写 3 次数据。重做日志,双写缓冲区,然后是数据文件。我认为如果设计得当,它只需要两个。
      猜你喜欢
      • 1970-01-01
      • 2020-06-23
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      • 2010-10-19
      相关资源
      最近更新 更多