请考虑以下准则以优化重做日志记录:
-
使重做日志文件变大,甚至与缓冲池一样大 。当
InnoDB写重做日志文件的完整,就必须写缓冲池到磁盘的修改内容的 检查点。较小的重做日志文件会导致许多不必要的磁盘写入。尽管历史上大的重做日志文件导致恢复时间很长,但是现在恢复速度要快得多,您可以放心地使用大的重做日志文件。使用
innodb_log_file_size和innodb_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)。指定最小值时,不会发生预写。最大值等于该 值。如果为其指定的值 大于该 值,则该 设置将被截断为该 值。InnoDB``InnoDBinnodb_page_sizeinnodb_log_write_ahead_sizeinnodb_page_sizeinnodb_log_write_ahead_sizeinnodb_page_sizeinnodb_log_write_ahead_size相对于操作系统或文件系统缓存块大小, 将该值设置 得太低会导致写时读取。将该值设置得太高可能会fsync由于一次写入多个块而对日志文件写入的性能产生轻微影响 。 -
MySQL 8.0.11引入了专用的日志编写器线程,用于将重做日志记录从日志缓冲区写入系统缓冲区,并将系统缓冲区刷新到重做日志文件。以前,各个用户线程负责这些任务。从MySQL 8.0.22开始,您可以使用
innodb_log_writer_threads变量启用或禁用日志编写器线程 。专用的日志写入器线程可以提高高并发系统的性能,但是对于低并发系统,禁用专用的日志写入器线程可以提供更好的性能。 -
通过等待刷新重做的用户线程优化自旋延迟的使用。旋转延迟有助于减少延迟。在低并发时间段内,减少等待时间可能没有那么重要,并且在这些时间段内避免使用自旋延迟可以减少能耗。在高并发期间,您可能要避免在旋转延迟上花费更多的处理能力,以便将其用于其他工作。以下系统变量允许设置高水印值和低水印值,这些值定义了使用旋转延迟的边界。
-
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核心将被忽略。
-




