2.2 慢查询日志(The Slow Query Log)
慢查询日志指的是,所有SQL执行时间超过long_query_time变量指定值的语句,以及达到min_examined_row_limit条记录的语句。SQL语句执行时间不包含初始化表锁的开销。SQL语句执行完毕并且完成对其锁定资源的释放后,mysqld会将符合条件的SQL语句写入慢查询日志,因此慢查询日志中语句记录和顺序有可能跟执行顺序不同(执行时间也不同)。
long_query_time参数默认值为10,单位为秒,在5.1.21版本中,最小值为0,号称记录到文件时也能够支持到微秒,不过微秒部分会被忽略,只有整数部分会记录到表,在5.1.21版本之前,该参数值必须为整数,最小值为1。
控制慢查询日志有下列方式:
- 在5.1.6版本之前,慢查询日志是个文件,要启用慢查询日志,只需要在启动mysqld时附加--log-slow-queries[=file_name]即可;
- 从5.1.6版本开始,慢查询日志即可以是个文件,也可以保存在数据库中的指定表,上条说的那个参数同样好使,另外--log-output参数用来指定日志的输出目标(是文件还是表,或者两者都有);
- 从5.1.12版本开始,另提供了--slow_query_log[={0|1}]指定是否输出慢查询日志,指定为1时表示输出,否则表示不输出。
- 从5.1.29版本开始,另提供了--slow_query_log_file=file_name指定日志文件输出路径,而之前的--log-slow-queries则被废弃。
如果没有为慢查询日志指定文件名,则默认文件名为host_name-slow.log,保存在data目录下。
慢查询日志可以用来查看执行时间超出指定时间的SQL语句,并针对这部分语句重点调优,不过,查看一个较大的慢查询日志极为不便,可以尝试使用mysqldumpslow命令对慢查询日志进行分析,关于mysqldumpslow命令的用法可以参考相关章节。
在5.1版本中,当指定--log-queries-not-using-indexes参数后,可以把没有使用索引的查询记录到慢日志,而不管其执行速度。启用--log-slow-admin-statements选项可以记录一些管理操作语句到慢查询日志,比如OPTIMIZE TABLE、ANALYZE TABLE、ALTER TABLE。
需要注意的是,慢查询日志中有可能记录到与用户权限或密码相关的语句,因此慢查询日志文件的保存也要注意安全。 |