查看mysql版本命令:
SELECT VERSION();
查看是否开启慢查询功能:
show global variables like '%slow%';
查询结果:
如果看到slow_query_log为ON,则说明,开启了慢查询功能,
查看设置慢查询的时写日志的时间开关
show global variables like '%long%';
查询结果:
此处long_query_time我设置的是0.1秒,如果超过0.1秒就写日志文件
具体配置操作:
vi /ect/my.cnf
配置内容如下:
# long sql congfig by kg
long_query_time=0.1
#log_queries_not_using_indexes=1
slow_query_log=on
slow_query_log_file=/var/log/mysql-slow.log
注:不要开启log-queries-not-using-indexes没有索引查询记录功能,这个功能实际用处不大。就是记录SQL查询的时候,没有索引的通通记录。虽然索引对查询的速度有影响,但要看数据量大小。因为开启了这个功能以后,select * from tab这样的查询也会被记录在日志中,很快日志文件就会被垃圾信息给充满,从而影响主要的查询慢日志记录的查看。
重新启动 mysql:
service mysqld restart
验证慢查询:
SELECT SLEEP(1);
查看日志结果:
[root@yjw00 log]# cat mysql-slow.log
/usr/sbin/mysqld, Version: 5.6.29-log (MySQL Community Server (GPL)). started with:
Tcp port: 3306 Unix socket: /var/lib/mysql/mysql.sock
Time Id Command Argument
# Time: 160504 17:50:36
# User@Host: root[root] @ [192.168.0.159] Id: 3
# Query_time: 1.000563 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
use test;
SET timestamp=1462355436;
SELECT SLEEP(1);
select sleep(1)在日志中了,说明查询超过0.1秒了。
最后
1、日志不能说明一切问题,知识表象,可能跟锁表、系统繁忙的偶发性有关,当然,如果某条SQL语句经常查询慢那基本可以判断是可以再次优化的。
2、不要开启log-queries-not-using-indexes没有索引查询记录功能,这个功能实际用处不大。就是记录SQL查询的时候,没有索引的通通记录。虽然索引对查询的速度有影响,但要看数据量大小。因为开启了这个功能以后,select * from tab这样的查询也会被记录在日志中,很快日志文件就会被垃圾信息给充满,从而影响主要的查询慢日志记录的查看。
3、MySQL自带了mysqldumpslow工具用来分析slow query日志,或者其它工具也可以,通过工具配合可以更好的分析。