如何定位并優化慢 SQL?
一、慢 SQL 的定義與影響
1.1 什么是慢 SQL?
慢 SQL是指執行時間超過預期閾值的SQL語句,通常由以下特征:
- 執行時間超過慢查詢閾值(如MySQL默認10秒)
- 消耗大量CPU/IO資源
- 導致連接堆積或系統負載升高
關鍵結論:慢SQL是數據庫性能瓶頸的主要誘因,可能引發連鎖性的系統故障
1.2 慢 SQL 的業務影響
- 用戶體驗下降(頁面加載緩慢)
- 系統吞吐量降低
- 數據庫連接池耗盡
- 嚴重時導致雪崩效應
二、定位慢 SQL 的方法
2.1 數據庫內置工具
MySQL 方案
-- 開啟慢查詢日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2; -- 設置慢查詢閾值(秒)
SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';-- 查看慢查詢統計
SHOW STATUS LIKE 'Slow_queries';
PostgreSQL 方案
-- 修改postgresql.conf
log_min_duration_statement = 2000 -- 記錄超過2秒的查詢
log_statement = 'none' -- 避免記錄所有語句
2.2 性能分析工具
- EXPLAIN:基礎執行計劃分析
- EXPLAIN ANALYZE(PgSQL)/ EXPLAIN FORMAT=JSON(MySQL):實際執行統計
- pt-query-digest:MySQL慢查詢日志分析工具
- pgBadger:PostgreSQL日志分析器
2.3 監控系統集成
- Prometheus + Grafana 監控QPS/響應時間
- Percona PMM 全鏈路監控方案
- 阿里云DAS / AWS