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

如何理解mysql的redo日志参数innodb_log_write_ahead_size中read-on-write,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。


先来说说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保持一致了.这样就可以直接写入磁盘.就省去了先读到系统内存,再修改大小,再写入的过程....

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对亿速云的支持。