MYSQL定位慢查询

来源:互联网 发布:ntfs for mac 写在失败 编辑:程序博客网 时间:2024/04/30 16:08
在web开发中,我们经常会写出一些SQL语句,一条糟糕的SQL语句可能让你的整个程序都非常慢,超过10秒一般用户就会选择关闭网页,如何优化SQL语句将那些运行时间比较长的SQL语句找出呢?MySQL给我们提供了一个很好的功能,那就是慢查询!所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!那么如何应用慢查询呢?
开启MySQL的慢查询日志功能
默认情况下,MySQL是不会记录超过一定执行时间的SQL语句的。要开启这个功能,我们需要修改MySQL的配置文件,windows下修改my.ini,Linux下修改my.cnf文件,在[mysqld]最后增加如下命令:

slow_query_log= 1
long_query_time= 1
slow_query_log_file=c:/slow.log
解释:
slow_query_log= 1,表示开启慢查询日志功能,当然slow_query_log= 0就是关闭了(默认情况),要开启也可以直接这样写slow_query_log。
long_query_time =1,表示设置慢查询的时间为1S,默认为10S,即如果有查询超过了这个时间,将会被记录到慢查询日志中。当然在高版本的MYSQL中这个时间还可以设置成小数。
slow_query_log_file=c:/slow.log,表示慢查询日志存放的目录文件。当然这条可以不写,不写时,默认在mysql的data目录下生成“主机名_slow.log”的文件来存放日志。

测试
1、在my.ini中加入以下配置,并重启动MYSQL服务
slow_query_log = 1
ong_query_time = 1
2、在MYSQL控制如输入命令select sleep(2)
mysql> select sleep(2);
+----------+


| sleep(2) |


+----------+


|        0|


+----------+


1 row in set (2.00 sec)


3、再查看日志文件,会看到以下信息。
# Time: 141014 14:28:52
# User@Host: root[root] @ localhost[::1]  Id:     1
# Query_time: 2.000114  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 0
SET timestamp=1413268132;
select sleep(2);
附录
另外,我们还要了解解一些MYSQL数据库查看状态的命令,以便更详尽的掌控MYSQL。在控制如下执行这些命令查看mysql数据库一些运行的状态。


show [session|global]status 注:不写默认的为session..session只取出当前会话的状态,global会取出从启动到现在的状态。


showstatus   查看数据库状态,这里面的状态有很多,DBA应该了解大多数。


showstatus like ‘uptime’    数据库启动时间(S)


showstatus like ‘com_select’    数据库执行了多少次查询


showstatus like ‘com_update’   数据库执行了多少次更新


showstatus like ‘com_delete’    数据库执行了多少次删除
showstatus like ‘com_insert’     数据库执行了多少次插入
showstatus like 'connections'   试图链接MYSQL数据库的次数;另外可用cmd下的netstat –an 查看是那些IP链接到3306上,即链接到MYSQL数据库上。
show status like 'slow_queries';              慢查询次数。默认情况下,超过10S的为慢查询。
控制台下修改MYSQL默认的慢查询时间
show variableslike 'long_query_time'  查询默认的慢查询时间
set long_query_time = 1    设置默认的慢查询时间
0 0
原创粉丝点击