天天看點

Java:SQL慢查詢定位之profile

作者:烏猿

Show profiles是5.0.37之後才有的功能,是以我們需要確定版本是在5.0.37之後。

Java:SQL慢查詢定位之profile

進入MySQL

通過mysql> Select version();

查詢目前MySQL版本号。

Java:SQL慢查詢定位之profile

查詢版本号

檢視是否打開profiles功能,預設是關閉的(舉例):使用自己本地建立的資料庫。

mysql> show profiles;

顯示為空,說明profiles功能是關閉的。

Java:SQL慢查詢定位之profile

檢視功能是否關閉

開啟開啟profile:mysql> set profiling=1;

執行兩條SQL語句:

EXPLAIN SELECT DISTINCT device_id FROM user_submit LIMIT 20;

SELECT DISTINCT device_id FROM user_submit;

Java:SQL慢查詢定位之profile

執行SQL語句

執行show profiles:

Java:SQL慢查詢定位之profile

執行show profiles

表中的Query_ID字段就是給show profile for query 當具體id的。

調整hostory大小:如果hostory比較小,有可能query不到。

SET profiling_history_size=100;

Java:SQL慢查詢定位之profile

調整hostory

show profile for query 具體id;展示sql的所有執行階段,例如:鎖等待、執行、優化、發送資料、記憶體排序;

Java:SQL慢查詢定位之profile

SQL所有執行階段

如果sending data比較大,說明發送資料慢,代表網絡IO有影響。

如果Copying to tmp table比較大,說明臨時表慢,可能原因distinct檢視會用到臨時表;

檢視cpu、記憶體和IO資訊:

mysql> show profile block io,cpu for query 2;

Java:SQL慢查詢定位之profile

cpu、記憶體和io資訊

另外還可以看到memory,swaps,context switches,source 等資訊。