我們在做性能測試的時候,慢sql也可以說是很常見問題,我的性能測試生涯幾乎經常遇到慢sql,那么我們怎么來判斷有沒有慢sql呢,有慢sql后怎么來分析優(yōu)化呢?如圖:
通過上圖看可以看到當存在慢sql的時候,這里會有計數,在之前我們還要查詢一下有沒有開啟慢sql,
1)通過語句直接查詢:show variables like 'slow_query%';輸出結果
可以看到 慢查詢日志是開啟的,如果沒有開啟,
執(zhí)行set global slow_query_log='ON'; 開啟慢sql日志即可
2)查詢一下sql語句執(zhí)行超過多久后會當慢sql的記錄:
show variables like '%long_query_time%'; 輸出結果
經查詢可知sql語句執(zhí)行超過1s就會當慢sql進行記錄,當我們想修改這個時間的時候,執(zhí)行語句:set long_query_time=0.5;
3)我們來隨便執(zhí)行一個sql 看一下監(jiān)控效果
SELECT * from test LIMIT 100000;
4)我們看一下執(zhí)行計劃,為什么這個sql這么慢
EXPLAIN SELECT * from test LIMIT 100000;
可以看出索引類型是全局索引,我這里是為了演示,實際測試時候如果出現是不可以的
5)既然這個sql慢,我們接下來分析一下吧
啟用profiling:SET profiling=1;
查看profiling 是否啟用:SELECT @@profiling; 0 代表沒有啟用
執(zhí)行需要分析的sql:SELECT * from test LIMIT 100000;
獲取上面sql執(zhí)行的Query_ID:show profiles;
查詢消耗等信息: show PROFILE ALL FOR QUERY "要分析的語句的Query_ID";
可以看到sql的執(zhí)行過程耗時等信息
關閉profiling:SET profiling = 0;
推薦閱讀: