在mysql/ target=_blank class=infotextkey>mysql数据库日志文件中,有一个重要的日志就是慢查询日志,有关它的重要性,可以通过以下文章了解下:
一、mysql慢查询日志(the slow query log)
所谓慢查询日志,是指所有sql执行时间超过long_query_time变量指定值的语句,以及达到min_examined_row_limit条记录的语句。
sql语句执行时间不包含初始化表锁的开销。
sql语句执行完毕并且完成对其锁定资源的释放后,mysqld会将符合条件的sql语句写入慢查询日志,因此与普通mysql日志相比,慢查询日志中语句记录和顺序有可能跟执行顺序不同(执行时间也不同)。
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。
注意,慢查询日志中有可能记录到与用户权限或密码相关的语句,因此慢查询日志文件的保存也要注意安全。