考虑以下优化重做日志的指导方针:
让你的重做日志文件变大,甚至像缓冲池.当
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
以匹配操作系统或文件系统缓存块大小。当重做日志的预写块大小与操作系统或文件系统缓存块大小不匹配,导致重做日志块没有完全缓存到操作系统或文件系统时,就会发生写时读。的有效值
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 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核的处理能力总和的百分比。默认值为50%。例如,在拥有4个CPU核的服务器上,两个CPU核的100%使用率是CPU处理能力总和的50%。的
innodb_log_spin_cpu_pct_hwm
配置选项尊重处理器关联性。例如,如果服务器有48个内核,但是mysqld进程被固定在4个CPU核上,其他44个CPU核被忽略。