1.慢查詢的用途mysql
它能記錄下全部執行超過long_query_time時間的SQL語句,幫咱們找到執行慢的SQL,方便咱們對這些SQL進行優化。sql
2.查看是否開啓慢查詢數據庫
show variables like 'slow_query%';markdown
slow_query_log = off,表示沒有開啓慢查詢工具
slow_query_log_file 表示慢查詢日誌存放的目錄性能
3.開啓慢查詢(須要的時候纔開啓,由於很耗性能,建議使用即時性的)優化
方式一:(即時性的,重啓mysql以後失效,經常使用的)spa
set global slow_query_log=1; 或者 set global slow_query_log=ON;日誌
開啓以後 咱們會發現 /var/lib/mysql下已經存在 localhost-slow.log了,未開啓的時候默認是不存在的。code
方式二:(永久性的)
在/etc/my.cfg文件中的[mysqld]中加入:
slow_query_log=ON
slow_query_log_file=/var/lib/mysql/localhost-slow.log
複製代碼
4.設置慢查詢記錄的時間
查詢慢查詢記錄的時間:show variables like 'long_query%',默認是10秒鐘,意思是大於10秒纔算慢查詢。
咱們如今設置慢查詢記錄時間爲1秒:set long_query_time=1;
5.執行select count(1) from order o where o.user_id in (select u.id where users);
由於咱們開啓了慢查詢,且設置了超過1秒鐘的就爲慢查詢,此sql執行了24秒,因此屬於慢查詢。
咱們在日誌中查看:
more /var/lib/mysql/localhost-slow.log,
咱們能夠看到查詢的時間,用戶,花費的時間,使用的數據庫,執行的sql語句等信息。在生產上咱們就可使用這種方式來查看 執行慢的sql。
6.查詢慢查詢的次數:show status like 'slow_queries';
在咱們從新執行剛剛的查詢sql後,查詢慢查詢的次數會變爲8
固然,用 more /var/lib/mysql/localhost-slow.log 也是能夠看到詳細結果的。
在生產中,咱們會分析查詢頻率高的,且是慢查詢的sql,並非每一條查詢慢的sql都須要分析。
7.慢查詢日誌分析工具Mysqldumpslow
因爲在生產上會有不少慢查詢,因此採用上述的方法查看慢查詢sql會很麻煩,還好MySQL提供了慢查詢日誌分析工具Mysqldumpslow。
其功能是, 統計不一樣慢sql的出現次數(Count),執行最長時間(Time),累計總耗費時間(Time),等待鎖的時間(Lock),發送給客戶端的行總數(Rows),掃描的行總數(Rows)
(1)查詢Mysqldumpslow的幫助信息,隨便進入一個文件夾下,執行:mysqldumpslow --help
查看mysqldumpslow命令安裝在哪一個目錄:whereis mysqldumpslow
說明:
(2)案例:取出耗時最長的兩條sql
格式:mysqldumpslow -s t -t 2 慢日誌文件
mysqldumpslow -s t -t 2 /var/lib/mysql/localhost-slow.log
參數分析:
(3)案例:取出查詢次數最多,且使用了in關鍵字的1條sql
mysqldumpslow -s c -t 1 -g 'in' /var/lib/mysql/localhost-slow.log
這種方式更加方便,更加快捷!
8.show profile
用途:用於分析當前會話中語句執行的資源消耗狀況
(1)查看是否開啓profile,mysql默認是不開啓的,由於開啓很耗性能
show variables like 'profiling%';
(2)開啓profile(會話級別的,關閉當前會話就會恢復原來的關閉狀態)
set profiling=1; 或者 set profiling=ON;
(3)關閉profile
set profiling=0; 或者 set profiling=OFF;
(4)顯示當前執行的語句和時間
show profiles;
(5)顯示當前查詢語句執行的時間和系統資源消耗
show profile cpu,block io for query 4;(分析show profiles中query_id等於4的sql所佔的CPU資源和IO操做)
或者直接 : show profile for query 4;