您的位置:宽带测速网 > mysql教程 > 如何理解mysql的redo日志参数innodb_log_write_ahead_size中read-on-write

如何理解mysql的redo日志参数innodb_log_write_ahead_size中read-on-write

2025-06-22 17:06来源:互联网 [ ]


先来说说innodb_log_write_ahead_size, 这个参数是在5.7.4引入的.
#innodb_log_write_ahead_size 默认为8192.
#引入write-ahead,将当前写入redo文件的偏移量整除innodb_log_write_ahead_size该值,不能整除时则补0,多写一部分数据,这样一来,写入的数据是与磁盘的block size保持一致了.这样就可以直接写入磁盘.就省去了先读到系统内存,再修改大小,再写入的过程....

在引入innodb_log_write_ahead_size之前,redo的刷盘是采用read-on-write模式的,关于read-on-write的理解如下:
首先看官方说法:
Read-on-write occurs when redo log blocks are not entirely cached to the operating system or file system due to a mismatch between write-ahead block size for redo logs and operating system or file system cache block size.

我大概理解了下read-on-write: innodb是以512字节一个block写入redo文件的,一般的linux的文件系统都是4k大小的..如果需要写入的日志文件块不在操作系统的cache时,就需要将对应的4k大小的block读入系统内存,修改512字节,然后在写入磁盘... 看淘宝的解析.是这么个意思...
引入write-ahead,将当前写入redo文件的偏移量整除innodb_log_write_ahead_size该值,不能整除时则补0,多写一部分数据,这样一来,写入的数据是与磁盘的block size保持一致了.这样就可以直接写入磁盘.就省去了先读到系统内存,再修改大小,再写入的过程....