今天客戶那邊遇到一個問題:多選檔案進行操作,資料量一大後臺處理就特別慢,瀏覽器顯示504超時。為了驗證問題是否出在sql語句,所以用以下方法來分析:
- 查詢SQL執行記錄
- explain 分析
- MySQL 語句執行時間
下面會分別介紹三個方法的開啟方法。
查詢SQL執行記錄
查詢日誌功能是否開啟
show variables LIKE 'general%';
複製程式碼
general_log:日誌記錄功能是否開啟,預設為OFF
general_log_file:日誌存放路徑
開啟日誌功能
set GLOBAL general_log = 'ON';
複製程式碼
然後再次查詢是否開啟成功
在指定路徑檢視SQL記錄
explain 分析
大部分的效能分析都需要使用到該命令,可以用來檢視SQL語句的執行效果,可以幫助選擇更好地索引和優化語句。
語法
explain + SQL語句
輸出:
引數解析
id | SELECT識別符。這是SELECT的查詢序列號 |
select_type |
SELECT型別,可以為以下任何一種:
|
table |
輸出的行所引用的表 |
type |
聯接型別。下面給出各種聯接型別,按照從最佳型別到最壞型別進行排序:
|
possible_keys |
指出MySQL能使用哪個索引在該表中找到行 |
key | 顯示MySQL實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是NULL。 |
key_len | 顯示MySQL決定使用的鍵長度。如果鍵是NULL,則長度為NULL。 |
ref | 顯示使用哪個列或常數與key一起從表中選擇行。 |
rows | 顯示MySQL認為它執行查詢時必須檢查的行數。多行之間的資料相乘可以估算要處理的行數。 |
filtered | 顯示了通過條件過濾出的行數的百分比估計值。 |
Extra |
該列包含MySQL解決查詢的詳細資訊
|
MySQL 語句執行時間
show profile 以及show profiles語句可以顯示當前會話過程中執行SQL語句的效能資訊。
檢視profile是否開啟
show variables like '%profil%';
複製程式碼
profiling:OFF 預設此功能關閉
設定開啟狀態
set profiling = 1;
複製程式碼
再次檢視是否開啟
已經是開啟狀態
執行sql語句後進行分析
執行完後,輸入
show profiles;
複製程式碼
即可檢視所有的sql的執行時間
show profile for query 1
複製程式碼
檢視第1個sql語句的執行的各個操作的耗時詳情。
show profile cpu, block io, memory,swaps,context switches,source for query 6;
複製程式碼
可以檢視出一條SQL語句執行的各種資源消耗情況,比如CPU,IO等
show profile all for query 6 檢視第6條語句的所有的執行資訊。
複製程式碼
測試完畢後,關閉引數:
mysql> set profiling=0
複製程式碼
下一篇來說下慢查詢