MySQL慢查詢日誌與磁盤IO

分析MySQL語句查詢性能的方法除了使用 EXPLAIN 輸出執行計劃,還可以讓MySQL記錄下查詢超過指定時間的語句,我們將超過指定時間的SQL語句查詢稱爲“慢查詢”。

對於有效率問題的SQL語句(“慢查詢”),MySQL通過慢查詢日誌進行監控。


SHOW VARIABLES LIKE ‘slow_query_log’;

查看慢查詢日誌是否開啓:

這裏寫圖片描述


SHOW VARIABLES LIKE ‘%log%’;

查看關於日誌的所有屬性:

這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述
這裏寫圖片描述


SET GLOBAL log_queries_not_using_indexes = ON;

設置全局變量,沒用到索引的查詢也要記錄:

這裏寫圖片描述


SHOW VARIABLES LIKE ‘long_query_time’;

查看超過多長時間的查詢會被記錄到慢查詢日誌中:

這裏寫圖片描述


SET GLOBAL slow_query_log = ON;

開啓慢查詢日誌:

這裏寫圖片描述


SET GLOBAL long_query_time = 0;

設置慢查詢日誌記錄時間爲0秒,即全部查詢都記錄:

這裏寫圖片描述


SHOW VARIABLES LIKE ‘slow%’;

查看慢查詢日誌所在位置:

這裏寫圖片描述


查看全局變量是否設置成功(新開一個客戶端):

這裏寫圖片描述


查看慢查詢日誌內容:

# Time: 160715 15:00:30
# User@Host: root[root] @ localhost [127.0.0.1]  Id:     1
# Query_time: 0.000000  Lock_time: 0.000000 Rows_sent: 109  Rows_examined: 109
use sakila;
SET timestamp=1468566030;
SELECT * FROM country;

分析:

查詢用戶爲:root[root] @ localhost [127.0.0.1](User@Host)
查詢花費時間:0.000000秒(Query_time)
鎖定時間:0.000000秒(Lock_time)
返回記錄行數:109(Rows_sent)
檢索行數:109(Rows_examined)
查詢語句:SELECT * FROM country;


總結:

慢查詢日誌實時記錄查詢的相關信息,有利於及時發現開發過程中效率低下的SQL語句,及時進行優化!


磁盤IO相關:

  1. Rows_examined代表檢索的行數,其值一定程度上與磁盤的IO程度有關。IO即讀寫。試想,如果某個SQL操作需要(聯合)查詢的行數Rows_examined很大很大(從磁盤中讀出數據至MySQL服務器內存中進行SQL條件判斷),意味着磁盤的讀出操作比較繁忙,IO程度大。
  2. 若磁盤IO過大,很容易形成IO阻塞,導致系統瓶頸。數據庫文件存儲在硬盤中,硬盤的讀寫速度遠遠落後於CPU與內存(硬盤是磁盤的一種,磁盤還包括軟盤,磁盤是通過磁性進行讀寫功能的設備,斷電後保存的文件不會丟失。內存也可以儲存信息,但存儲的載體和磁盤不同,斷電後就不能保存數據。
  3. 內存是電腦的數據存儲設備之一,其特點爲容量較小,但數據傳送速度較快,用以彌補硬盤雖然容量大但傳送速度慢的缺點。在電腦中,內存被架設在硬盤和高速緩存器(容量比內存更小同時速度比內存更快的存儲器,架設在內存和CPU之間)之間,從而可以充分發揮CPU的運算能力,不至於使CPU的高速運算能力因數據提取速度過慢而浪費,所以,電腦的運行速度是由CPU,高速緩存器以及內存等存儲設備共同決定的。
  4. 硬盤是電腦中用來存放暫時不用的信息(包括系統文件)的數據存儲設備,特點是存儲容量大,但數據傳送速度慢。硬盤上的信息永遠是暫時不用的,如果用,要先裝入內存!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章