MYSQL診斷分析低效SQL方法
性能診斷分析是一種利用工具手段,通過採用實際監測,而不是“自我猜測 ”來幫助項目組進行診斷。
可以通過以下方式定位執行效率較低的 SQL 語句:
- MYSQL慢日誌分析
MYSQL可以通過慢查詢日誌定位那些執行效率較低的 sql 語句,用 --log-slow-queries[=file_name] 選項啓動時, mysqld 寫一個包含抓取所有執行時間超過long_query_time設定秒數的 SQL 語句的日誌文件。
慢日誌配置,linux 一般在my.cnf,如果是wind服務一般在my.ini, - 時時查看線程狀態
有時開啓慢日誌監控有時會影響MYSQL自身性能,可以 使用 show processlist查看當前MYSQL的線程, 因爲命令慢查詢日誌在查詢結束以後才紀錄,所以在應用業務層上反映執行效率出現問題的時候,再查慢查詢日誌並不能精準的定位問題,可以使用 show processlist 命令查看當前 MySQL 在進行的線程,包括線程的狀態,是否鎖表等等,可以實時的查看 SQL 執行情況, 同時對一些鎖表操作進行優化。 - EXPLAIN分析
通過EXPLAIN 分析低效 SQL的執行計劃:
該EXPLAIN語句提供有關MySQL如何執行語句的信息。 EXPLAIN作用有 SELECT, DELETE, INSERT, REPLACE,和 UPDATE語句。EXPLAIN會返回SELECT語句中使用的每個表的行信息 。它按照MySQL在處理語句時讀取它們的順序列出輸出中的表。如果MySQL使用嵌套循環連接方法解析所有連接。這意味着MySQL從第一個表中讀取一行,然後在第二個表,第三個表中找到匹配的行,依此類推。處理完所有表後,MySQL會通過表列表輸出所選列和回溯,直到找到有更多匹配行的表。從該表中讀取下一行,並繼續下一個表。
EXPLAIN輸出列如下:
如果發現語法問題,例如全表掃描等可以通過建立索引等優化處理,例如https://blog.51cto.com/372550/2325251,索引優化 中介紹。
一旦確定了性能瓶頸的根本原因,請採取適當的糾正措施,例如:
1、調整服務器參數(緩存大小,內存等)。
2、通過不同的方式調整查詢
3、調整數據庫模式(表,索引等)。
4、調整代碼