导读
在slow query log中频繁出现commit、binlog dump等奇怪的记录,本来这种SQL应该很快结束,不应该出现在slow query log中才对,这是为什么呢?
现象
线上有个数据库,在slow log中,存在大量类似下面的记录:
# Time: 150823 13:56:08
# User@Host: repl[repl] @ slave [10.x.x.x]
# Query_time: 9.000833 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1
SET timestamp=1377237368;
# administrator command: Binlog Dump;
或者这样的:
# Time: 150823 14:56:08
# User@Host: repl[repl] @ slave [10.x.x.x]
# Query_time: 2.000833 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 1
SET timestamp=1377237368;COMMIT;
每完成一次COMIT 或 binlog dump都会被记录下来,看着非常不爽。
经过排查,最后确认是特定版本存在这个现象,目前发现官方 5.1.49 存在,估计整个官方 5.1.x 都会有这个现象。
解决方法
修改 my.cnf 配置文件,增加或修改下面这个选项:
Include slow administrative statements in the statements written to the slow query log. Administrative statements include ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, and REPAIR TABLE.
比较坑人的是,这个选项在5.1无法在线修改,需要重启mysqld才行。
手册上关于这个选项的解释如下:
Include slow administrative statements in the statements written to the slow query log. Administrative statements include ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, and REPAIR TABLE.
手册也有不靠谱的时候啊,还是实践出真知,哈哈。