• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 优化InnoDB重做日志

    请考虑以下准则以优化重做日志记录:

    • 使重做日志文件变大,甚至与缓冲池一样大。当InnoDB写重做日志文件的完整,就必须写缓冲池到磁盘的修改内容的检查点。较小的重做日志文件会导致许多不必要的磁盘写入。尽管历史上大的重做日志文件导致恢复时间很长,但是现在恢复速度要快得多,您可以放心地使用大的重做日志文件。

      使用innodb_log_file_sizeinnodb_log_files_in_group配置选项配置重做日志文件的大小和数量。有关修改现有重做日志文件配置的信息,请参阅《更改重做日志文件的数量或大小》。

    • 考虑增加日志缓冲区的大小。较大的日志缓冲区使大型事务可以运行,而无需在事务提交之前将日志写入磁盘。因此,如果您有更新,插入或删除许多行的事务,则使日志缓冲区更大可以节省磁盘I / O。日志缓冲区大小是使用innodb_log_buffer_size配置选项配置的,可以在MySQL 8.0中动态配置。
    • 配置innodb_log_write_ahead_size配置选项以避免“ read-on-write ”。此选项定义重做日志的预写块大小。设置innodb_log_write_ahead_size为与操作系统或文件系统缓存块大小匹配。当由于重做日志的预写块大小与操作系统或文件系统缓存块大小不匹配而导致重做日志块未完全缓存到操作系统或文件系统时,发生写时读取。

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

      innodb_log_write_ahead_size相对于操作系统或文件系统缓存块大小,将该值设置得太低会导致写时读取。将该值设置得太高可能会fsync由于一次写入多个块而对日志文件写入的性能产生轻微影响。

    • 通过等待刷新重做的用户线程优化自旋延迟的使用。旋转延迟有助于减少延迟。在低并发期间,减少等待时间可能没有那么重要,并且在这些期间避免使用自旋延迟可以减少能耗。在高并发期间,您可能要避免在旋转延迟上花费更多的处理能力,以便将其用于其他工作。以下系统变量允许设置高水印值和低水印值,以定义自旋延迟的使用范围。

      • 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使用量之上,用户线程在等待刷新重做时不再旋转。该值表示为所有CPU内核的总处理能力的百分比。默认值为50%。例如,两个CPU内核的100%使用率是具有四个CPU内核的服务器上CPU组合处理能力的50%。

        innodb_log_spin_cpu_pct_hwm配置选项方面处理器的亲和性。例如,如果服务器具有48个核心,但是mysqld进程仅固定到四个CPU核心,则其他44个CPU核心将被忽略。