⼀个普通WEB站点的页⾯常常需要查询N条SQL语句后才能得出页⾯结果,当⽹站访问速度慢⽽前端做了⼤量优化⼯作以后,数据库瓶颈的查找也是WEB优化的⼀个重要部分。
MySQL中提供了⼀个慢查询的⽇志记录功能,可以把查询SQL语句时间⼤于多少秒的语句写⼊慢查询⽇志,⽇常维护中可以通过慢查询⽇志的记录信息快速准确地判断问题所在。开启慢查询功能
log-slow-queries 慢查询⽇志⽂件路径
long_query_time 超过多少秒的查询就写⼊⽇志打开my.cnf配置⽂件,加⼊以下代码:
log-slow-queries = /tmp/mysql-slow.log long_query_time = 2如果是windows则在my.ini中加⼊my.ini
复制代码 代码如下:log_slow_querieslong_query_time = 2
保存退出,重启MySQL即可。
关于long_query_time设置
通常我们设置long_query_time的值为2,表⽰查询SQL语句超过两秒的就记录,通常2秒就够了,默认是10秒。然⽽,对于许多WEB程序来说,2秒的查询还是太长了。的确在许多站点中,⼀个SQL语句超过1秒的执⾏时间都算慢的了。mysql5.1.21以后才提供更细粒度的long_query_time设定,之前的版本只能以秒做单位。查看⽇志
复制代码 代码如下:
[root@lizhong tmp]# tail -f /tmp/mysql_slow.logTime: 120815 23:22:11
User@Host: root[root] @ localhost []
Query_time: 9.869362 Lock_time: 0.000035 Rows_sent: 1 Rows_examined: 6261774SET timestamp=1294388531;select count(*) from blog;第⼀⾏:执⾏时间第⼆⾏:执⾏⽤户第三⾏(重要):
Query_time SQL执⾏的时间,越长则越慢
Lock_time 在MySQL服务器阶段(不是在存储引擎阶段)等待表锁时间Rows_sent 查询返回的⾏数
Rows_examined 查询检查的⾏数最后
1、⽇志不能说明⼀切问题,知识表象,可能跟锁表、系统繁忙的偶发性有关,当然,如果某条SQL语句经常查询慢那基本可以判断是可以再次优化的。
2、不要开启log-queries-not-using-indexes没有索引查询记录功能,这个功能实际⽤处不⼤。就是记录SQL查询的时候,没有索引的通通记录。虽然索引对查询的速度有影响,但要看数据量⼤⼩。因为开启了这个功能以后,select * from tab这样的查询也会被记录在⽇志中,很快⽇志⽂件就会被垃圾信息给充满,从⽽影响主要的查询慢⽇志记录的查看。
3、MySQL⾃带了mysqldumpslow⼯具⽤来分析slow query⽇志,或者其它⼯具也可以,通过⼯具配合可以更好的分析。
因篇幅问题不能全部显示,请点此查看更多更全内容