Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Optimizing InnoDB Redo Logging

10.5.4 InnoDB redo日志优化

请考虑以下redo日志优化指南:

  • 增加redo日志文件的大小。当 InnoDB 写满redo日志文件时,它必须将缓冲池的修改内容写入磁盘,以便 检查点。小的redo日志文件会导致许多不必要的磁盘写入。

    redo日志文件的大小由 innodb_redo_log_capacity 确定。InnoDB 尝试维护 32 个redo日志文件,每个文件的大小为 innodb_redo_log_capacity 的 1/32。因此,修改 innodb_redo_log_capacity 设置将更改redo日志文件的大小。

    有关修改redo日志文件配置的信息,请参阅 第 17.6.5 节,“Redo Log”

  • 考虑增加 日志缓冲区 的大小。大型日志缓冲区使大型 事务 可以在提交前不需要将日志写入磁盘,从而节省磁盘 I/O。日志缓冲区的大小可以使用 innodb_log_buffer_size 配置选项进行配置,该选项可以在 MySQL 8.3 中动态配置。

  • 配置 innodb_log_write_ahead_size 配置选项,以避免 读取-写入。该选项定义 redo 日志的写入块大小。将 innodb_log_write_ahead_size 设置为操作系统或文件系统缓存块大小。

    有效的 innodb_log_write_ahead_size 值是 InnoDB 日志文件块大小(2n)的倍数。最小值是 InnoDB 日志文件块大小(512)。写入不发生时指定最小值。最大值等于 innodb_page_size 值。如果您指定的 innodb_log_write_ahead_size 值大于 innodb_page_size 值,则 innodb_log_write_ahead_size 设置将被截断为 innodb_page_size 值。

    innodb_log_write_ahead_size 值设置得太低,相对于操作系统或文件系统缓存块大小,会导致读取-写入。将值设置得太高可能会对 fsync 性能产生轻微影响,因为多个块将被同时写入。

  • MySQL 提供了专门的日志写入线程,以便从日志缓冲区写入 redo 日志记录到系统缓冲区,并将系统缓冲区刷新到 redo 日志文件中。您可以使用 innodb_log_writer_threads 变量启用或禁用日志写入线程。专门的日志写入线程可以在高并发系统上提高性能,但对于低并发系统,禁用专门的日志写入线程可能提供更好的性能。

  • 优化用户线程等待刷新 redo 的自旋延迟。自旋延迟有助于减少延迟。在低并发期间,减少延迟可能不是优先考虑的目标,因此在这些期间避免使用自旋延迟可能会减少能耗。在高并发期间,您可能不想浪费处理能力来执行自旋延迟,以便将其用于其他工作。以下系统变量允许设置高水位和低水位值,以定义自旋延迟的使用边界。

    • innodb_log_wait_for_flush_spin_hwm:定义了日志刷新的最大平均等待时间,超过这个时间,用户线程将不再旋转等待已刷新的重做日志。默认值为400微秒。

    • innodb_log_spin_cpu_abs_lwm:定义了用户线程旋转等待已刷新重做日志时的最小CPU使用率。该值以CPU核心使用率的总和表示。例如,默认值80表示单个CPU核心的80%。在具有多核心处理器的系统上,值150表示一个CPU核心的100%使用率加上第二个CPU核心的50%使用率。

    • innodb_log_spin_cpu_pct_hwm:定义了用户线程旋转等待已刷新重做日志时的最大CPU使用率。该值以所有CPU核心的总处理能力的百分比表示。默认值为50%。例如,两个CPU核心的100%使用率相当于四个CPU核心服务器上总处理能力的50%。

      配置选项innodb_log_spin_cpu_pct_hwm尊重处理器亲和力。例如,如果服务器有48个核心,但mysqld进程仅固定在四个CPU核心上,那么其他44个CPU核心将被忽略。