查看mysql版本命令:java
SELECT VERSION();
查看是否开启慢查询功能:mysql
show global variables like '%slow%';
查询结果:sql
若是看到slow_query_log为ON,则说明,开启了慢查询功能,socket
查看设置慢查询的时写日志的时间开关工具
show global variables like '%long%';
查询结果:优化
此处long_query_time我设置的是0.1秒,若是超过0.1秒就写日志文件spa
具体配置操做:rest
vi /ect/my.cnf
日志
配置内容以下:code
# 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秒了。
最后
一、日志不能说明一切问题,知识表象,可能跟锁表、系统繁忙的偶发性有关,固然,若是某条SQL语句常常查询慢那基本能够判断是能够再次优化的。
二、不要开启log-queries-not-using-indexes没有索引查询记录功能,这个功能实际用处不大。就是记录SQL查询的时候,没有索引的统统记录。虽然索引对查询的速度有影响,但要看数据量大小。由于开启了这个功能之后,select * from tab这样的查询也会被记录在日志中,很快日志文件就会被垃圾信息给充满,从而影响主要的查询慢日志记录的查看。
三、MySQL自带了mysqldumpslow工具用来分析slow query日志,或者其它工具也能够,经过工具配合能够更好的分析。