Mysql教程

17.5慢查询日志

慢査询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以査找出哪些査询语句的执行效率很低,以便进行优化。本节将为读者介绍慢查询日志的内容。

17.5.1启动和设置慢查询日志

默认情况下,慢查询日志功能是关闭的。通过my.cof或者my.ini文件的log-slow-queries选项可以开启慢查询日志。通过my.cof或者my.ini选项来设置时间值,时间以秒为单位。如果查询时间超过了这个时间值,这个查询语句将被记录到慢查询日志。将log-slow-queries选项和long_query_time选项加入到my.cnf或者my.ini文件的[mysqld]间组中。形式如下:

my.cnf (Linux操作系统下)或者my.ini(Windows操作系统下)
[mysqld]
log-slow-queries[=DIR\[filename]]
long__query__time=n

其中,DIR参数指定慢查询日志的存储路径;filaname参数指定日志的文件名,生成日志文件的完整名称为filename-slow.log。如果不指定存储路径,慢查询日志将默认存储到MySQL数据库的数据文件夹下。如果不指定文件名,默认文件名为'hostname-slow.lod',hostname是MySQL服务器的主机名。"n"参数是设定的时间值,该值的单位是秒。如果不设置long_query_time选项,默认时间为10秒。

17.5.2查看慢查询日志

执行时间超过指定时间的查询语句会被记录到慢查询日志中。如果用户希望查询哪些查询语句的执行效率低,可以从慢查询日志中获得想要的信息。慢查询日志也是以文本文件的形式存储的。可以使用普通的文本文件查看工具来查看。

【示例17-8】下面是笔者MySQL服务器的慢查询日志的部分内容。

MySQL, Version: 5.1.40-community-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: /tmp/mysql.sock
Time	ld Command Argument
#Time: 091122 17:30:46
User@Host: root[root] @ localhost [127.0.0.1]
Query_time: 0.000000 Lock_time: 0.000000 Rows_sent: 8 Rows_examined: 8
use test;
SET timestamp=1258882246;
SELECT.PROMscore;
Time: 091124 11:05:03
User@Host: root[root] @ localhost [127.0.0.1]
S
Query_time: 6.218750 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SELECT BENCHMARMK(200000000,1*2)

BENCHMARMK(count,expr)函数可以测试执行count次expr操作需要的时间。现在long_query_time的值设置为5秒,而执行BENCHMARK(200000000,l*2)需要6秒多。因此,这个语句被记录到慢查询日志中。


17.5.3删除慢査询日志

慢查询日志的删除方法与通用查询日志的删除方法是一样的。可以使用mysqladmin命令来删除。也可以使用手工方式来删除。mysqladmin命令的语法如下:

mysqladmin -u root -p flush-logs

执行该命令后,命令行会提示输入密码。输入正确密码后,将执行删除操作。新的慢査询日志会直接覆盖旧的查询日志,不需要再手动删除了。数据库管理员也可以手工删除 慢查询日志,删除之后需要重新启动MySQL服务,重启之后就会生成新的慢查询日志。如果希望备份旧的慢查询日志文件,可以将旧的日志文件改名,然后重启MySQL服务。

注意:通用查询日志和慢查询日志都是使用这个命令,使用时一定要注意。一旦执行这个命令,通用查询日志和慢查询日志都只存在新的日志文件中。如果希望备份旧的慢查询日志,必须先将旧的日志文件复制出来或者改名。然后,再执行上面的mysqladmin命令。



关注微信获取最新动态