版本
最开始在数据库慢查询里面发现偶尔的插入变慢怎么想也不明白,后来发现每次变慢的时间点和创建一个新的binlog的时间一致,然后经过测试,复现了此问题。
目前没发现为什么会引起此问题,如果要解决的话可以考虑设置max_binlog_size=600M,如果系统对插入速度或者超时没有苛刻的要求的话也可以不理会这个问题:)
最近还发现它不光阻塞更新,如果设置了replication那么它对从库的查询也有影响。
在binlog切换时,会有一个Rotate_log_event产生,而slave同步到此event后也会让Relay-log切换。由于mysql写这种日志都是写入系统缓存后就不管了,导致切换文件时需要对旧文件进行fdatasync,这时候瞬间io压力会过大,耗时较长。这种情况会阻塞更新的线程,让replication延迟,影响查询....
如果想解决此问题,可以调节系统/proc/sys/vm/下面 dirty_background_ratio、dirty_expire_centisecs、dirty_ratio、dirty_writeback_centisecs这几个值,或者设置sync_binlog和max_relay_log_size。