二进制日志是写操作是,首先写入二进制日志缓冲(binlog_cache)然后commit,再从binlog_cache写入到binlog文件,默认大小为32K,而binlog_cache是session级别的,也就是说实际binlog cache占用内存数= connections * binlog_cache,可见如果connection过高,binlog_cache不宜设置的过大,如果binlog_cache设置的过小,不足以满足commit前transaction产生的binlog时,会引发mysql使用临时文件来写binlog_cache。那么如何判断当前session的binlog_cache设置的是否合理呢。可以通过下面的命令查看。
show variables like '%binlog_cache_szie%';(32K)
show global status like '%binlog_cache%';
binlog_cache_use:内存中使用binlog_cache次数
binlog_cache_disk_use:使用临时文件(即磁盘)写二进制日志次数。
从上面的截图可以看出,mysql使用了5次临时文件来写入binlog_cache,说明32K的binlog_cache_size对当前mysql来说并不够用。可根据系统实际的内存压力来调整binlog_cache_size参数。