查看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日誌,或者其它工具也能夠,經過工具配合能夠更好的分析。