【问题标题】:Why we should not have the collective size of innodb_log_files more than the size of the innodb_buffer_pool为什么我们不应该让 innodb_log_files 的总大小超过 innodb_buffer_pool 的大小
【发布时间】:2012-03-29 11:41:37
【问题描述】:

以下是我对日志文件组的理解。

每当插入/更新 innodb 表时,这些表都会在 innodb_log_buffer_size 中捕获。 如果 innodb_log_buffer_size 已满或到了将其刷新到磁盘的时间,它们将被写入 innodb_log_files,这些文件以组的形式维护并同时提交到表空间中。

现在我的问题是,为什么我们的 innodb_log_files 的总大小不应该超过 innodb_buffer_pool 的大小,为什么我们要写入这些日志文件,尽管我们正在将它们刷新到磁盘...?

我无法通过网络得到正确的解释,至少我无法理解。请给我一些更好的解释。

真的提前谢谢你。 问候, 一天

【问题讨论】:

    标签: mysql crash-recovery


    【解决方案1】:
    Now my question is that why we should not have the collective size of innodb_log_files more than the size of the innodb_buffer_pool and why should we write to these log files though we are flushing it to the disc...?
    

    --> 我不确定在哪里提到它,比如innodb_buffer_pool_size 应该总是大于这个值innodb_log_files_in_group * innodb_log_file_size。 当然! innodb_buffer_pool_size 的推荐大小应为仅 Innodb 安装可用内存的 70-80%,应大于默认值 8MB。

    innodb_log_buffer_size 大型日志缓冲区使大型事务能够运行,而无需在事务提交之前将日志写入磁盘。因此,如果您有大事务,则使日志缓冲区更大可以节省磁盘 I/O。

    innodb_log_file_size 值越大,缓冲池中需要的检查点刷新活动越少,节省磁盘 I/O。但较大的日志文件也意味着在发生崩溃时恢复速度较慢。 您应该在几分钟内观察Innodb_os_log_written 变量,并估计每秒有多少字节写入您的 InnoDB 事务日志。您可以将此值乘以 3600(一小时)并除以 innodb_log_files_in_group 以选择合适的日志文件大小。

    innodb_log_buffer_size 在内部使用日志记录到这些日志文件以保存磁盘 I/O。

    【讨论】:

    • 你可以参考这个链接了解 InnoDB 刷新方法是如何工作的:1) dev.mysql.com/doc/refman/5.0/en/… 2) dev.mysql.com/doc/innodb-plugin/1.0/en/… read inline InnoDB 必须将所有重做条目包含在其中的脏缓冲池页面刷新到磁盘日志文件的一部分。需要时,InnoDB 通过刷新适当的脏页以在日志文件中腾出可用空间来执行所谓的“尖锐检查点”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    相关资源
    最近更新 更多