首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL SQL 性能問題定位五大神器:SHOW STATUS、EXPLAIN、PROFILE、TRACE、慢查詢日誌

     編輯:MySQL 綜合教學

MySQL SQL 性能問題定位五大神器:SHOW STATUS、EXPLAIN、PROFILE、TRACE、慢查詢日誌

面對問題先定位,再解決。本文總結五大定位手段。

1. SHOW STATUS 觀察 SQL 執行頻率

SHOW STATUS LIKE 'Com_%';

Com_xxx 顯示各類語句執行次數。參考:MySQL SHOW STATUS 詳解、中文詳細版。
SHOW STATUS 輸出

2. EXPLAIN 分析低效 SQL

EXPLAIN SELECT ...;

EXPLAIN 輸出

欄位含義關鍵值
select_type查詢類型SIMPLE、PRIMARY、UNION、SUBQUERY
type訪問類型ALL(全掃)、index、range、ref、eq_ref、const/system、NULL
possible_keys可能用到的索引-
key實際用到的索引-
key_len索引欄位長度-
rows預估掃描行數-
Extra執行情況描述Using index、Using where、Using filesort 等

3. EXPLAIN EXTENDED + SHOW WARNINGS

EXPLAIN EXTENDED SELECT ...;
SHOW WARNINGS;

輸出多 filtered 欄位(返回行數/檢查行數 × 100%);SHOW WARNINGS 的 Message 可見優化器重寫後的 SQL。
EXTENDED WARNINGS

4. SHOW PROFILE 剖析 SQL 執行耗時

SELECT @@have_profiling;     -- 是否支援
SELECT @@profiling;          -- 是否開啟
SET profiling = 1;           -- 開啟
-- 執行目標 SQL
SHOW PROFILES;               -- 列出最近查詢 ID
SHOW PROFILE FOR QUERY n;    -- 看某查詢各階段耗時

PROFILES PROFILE DETAIL

Sending data:線程開始訪問數據行並向客戶端發送,不僅是網路傳輸。

5. Optimizer Trace 追蹤優化器決策

SET optimizer_trace="enabled=on", end_markers_in_json=on;
SET optimizer_trace_max_mem_size=100000;
-- 執行目標 SQL
SELECT * FROM information_schema.OPTIMIZER_TRACE;

TRACE 輸出

6. 慢查詢日誌

配置 slow_query_log=1、long_query_time=0.05,配合 pt-query-digest 分析,建議接入 Anemometer 管理平台。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved