mysqlsla(MySQL Statement Log Analyzer)是 Perl 編寫的強大慢查詢日誌分析工具,能產生多維度統計報表,快速定位效能瓶頸。本文詳細記錄 Linux 環境安裝依賴、部署步驟、核心參數解讀與實戰分析流程。
wget https://github.com/daniel-nichter/mysqlsla/archive/refs/tags/v2.03.tar.gz
tar zxvf mysqlsla-2.03.tar.gz
# CentOS/RHEL
yum install perl-DBI perl-DBD-MySQL -y
# Ubuntu/Debian
apt-get install libdbi-perl libdbd-mysql-perl -y
# CPAN 通用安裝
cpan DBI DBD::mysql
若報錯 Can't locate DBI.pm,執行上述依賴安裝即可解決。
cp mysqlsla-2.03/bin/mysqlsla /usr/local/bin/
chmod +x /usr/local/bin/mysqlsla
mysqlsla --version
# 輸出:mysqlsla 2.03 ...
# 基本分析慢查詢日誌
mysqlsla -lt slow slow.log
# 指定排序維度(預設按總時間排序)
mysqlsla -lt slow --sort t_sum slow.log
# 只分析特定資料庫
mysqlsla -lt slow --db mydb slow.log
# 輸出格式:報表、CSV、JSON
mysqlsla -lt slow --report-format html slow.log > report.html
| 指標區塊 | 關鍵欄位 | 業務含義 |
|---|---|---|
| 總覽 | Queries Total / Unique | 總慢查詢數 / 去重後唯一 SQL 模板數 |
| Sorted By | 報表排序依據(t_sum, t_avg, cnt 等) | |
| 執行統計 | Count | 執行次數及佔比 |
| Time (Total/Avg/Min/Max/%Total) | 總/平均/最小/最大執行時間,佔總慢查詢時間比 | |
| 95% of Time | 去除極值後覆蓋 95% 查詢的時間分布(抗干擾) | |
| Lock Time (Total/Avg/95%) | 鎖等待時間統計,定位鎖爭用熱點 | |
| Rows Sent / Examined | 返回行數 vs 掃描行數,Examined/Sent 比值越大越需優化 | |
| 上下文 | Database / Users | 所屬資料庫、執行用戶與 IP、佔比 |
| Query Abstract | 抽象化 SQL 模板(參數化後) | |
| Query Sample | 具體執行樣本 SQL(含實際參數) |
# 確認慢查詢開啟
SHOW VARIABLES LIKE 'slow_query_log%';
SHOW VARIABLES LIKE 'long_query_time';
# 臨時開啟(無需重啟)
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1; -- 記錄超過 1 秒的查詢
SET GLOBAL log_queries_not_using_indexes = ON; -- 記錄未用索引查詢
# 產生 HTML 報告,按總時間排序
mysqlsla -lt slow --sort t_sum --report-format html /var/log/mysql/slow.log > /tmp/slow_report.html
# 或直接終端查看 Top 10
mysqlsla -lt slow --sort t_sum --top 10 /var/log/mysql/slow.log
| 指標特徵 | 可能原因 | 優化方向 |
|---|---|---|
| Rows Examined ≫ Rows Sent | 全表掃描、索引失效、範圍過大 | 建立/優化索引、改寫 WHERE、分區裁剪 |
| Lock Time 佔比高 | 鎖爭用、長事務、隔離級別問題 | 縮短事務、行鎖優化、避免間隙鎖 |
| Count 極高但 Avg Time 低 | 高頻小查詢、N+1 問題 | 批次查詢、快取、合併請求 |
| 95% Time ≪ Max Time | 極少數極慢查詢干擾整體視圖 | 關注 95% 指標,排除極值干擾 |
# 針對特定抽象 SQL 深度分析
mysqlsla -lt slow --grep "SELECT \* FROM orders WHERE" /var/log/mysql/slow.log
結合 EXPLAIN、SHOW CREATE TABLE、SHOW INDEX 進行具體優化。
mysqlsla 雖經典但更新緩慢,建議新項目優先採用 pt-query-digest。核心分析思維通用:聚焦高總耗時、高掃描行數、高鎖等待 三大維度,快速定位 ROI 最高的優化目標。