MySQL 提供了幾個不同的記錄檔,可以幫助你了解 MySQL 伺服器執行個體內部的情况。這些記錄檔包括:
- 錯誤記錄
- isam 記錄
- 一般查詢記錄
- 二進位記錄
- 慢速記錄
其中,慢速査詢記錄對於尋找效率低下或耗時的査詢尤其有用,這些查詢可能會對資料庫和伺服器的整體效能產生不利影響。本篇文章將介紹如何讀取和解釋慢速査詢記錄輸出,以提高偵錯査詢效能。
啟用慢速査詢記錄
慢速査詢記錄由 SQL 陳述式組成,這些 SQL 陳述式的執行時間超過 long_query_time 秒,並且至少需要檢查 min_examined_row_limit 列。因此,出現在慢速査詢記錄中的査詢是那些需要花費大量時間執行的査詢,是需要最佳化的査詢。
慢速査詢記錄預設是停用的,以節省磁碟空間。你可以將 --slow_query_log 變數設定為 1(在 Navicat 中為 ON)來開啟它。同樣,不提供參數也會開啟慢速査詢記錄。同樣,參數 0(在 Navicat 中為 OFF)將停用記錄。
在 Navicat 中,可以使用伺服器監控工具存取系統變數。你可通在「工具」主選單命令存取伺服器監控。在伺服器監控中,按一下中間的變數索引標籤並向下捲動以查看清單中的 slow_query_log 和 slow_query_log_file 伺服器變數:
讀取慢速査詢記錄
由於要篩選的內容太多,因此檢查長的慢速査詢記錄可能是一項耗時的任務。下面是慢速記錄檔中的典型項目:
# Time: 140905 6:33:11 # User@Host: dbuser[dbname] @ hostname [1.2.3.4] # Query_time: 0.116250 Lock_time: 0.000035 Rows_sent: 0 Rows_examined: 20878 use dbname; SET timestamp=1409898791; ...SLOW QUERY HERE...
為了更容易讀取記錄內容,可以使用 mysqldumpslow 命令列公用程式處理慢速査詢記錄檔並摘要其內容:
~ $ mysqldumpslow -a /var/lib/mysql/slowquery.log Reading mysql slow query log from /var/lib/mysql/slowquery.log Count: 2 Time=316.67s (633s) Lock=0.00s (0s) Rows_sent=0.5 (1), Rows_examined=0.0 (0), Rows_affected=0.0 (0), root[root]@localhost ...SLOW QUERY HERE...
Navicat 查詢分析器
Navicat Monitor的查詢分析器工具為査詢記錄提供圖形表示,使解釋其內容變得更加容易。此外,查詢分析器工具使你能夠監控和將查詢效能最佳化,將查詢活動統計資料視覺化,分析 SQL 陳述式,以及快速識別和解決長時間執行的查詢。
除了慢速査詢記錄,查詢分析器透過以下方法收集有關查詢陳述式的資訊。
- 從伺服器擷取一般查詢記錄並分析資訊。
- 查詢 performance_schema 資料庫並分析特定的效能資訊。
你可以在「最新的死結查詢」和「程序清單」部分下面找到「查詢分析器」部分:
總結
本文介紹了幾種讀取慢速査詢記錄輸出的方法,以更好地偵錯査詢的效能。