首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

mysqlsla 慢查詢分析工具完整使用指南

     編輯:MySQL 資料庫相關知識

工具簡介

mysqlsla 是一款強大的 MySQL 慢查詢日誌分析工具,支援多種日誌格式,內建 SQL 語句去重與多維度排序功能,能快速定位效能瓶頸。本文記錄安裝、配置、常用參數與輸出結果解讀。

安裝步驟 (CentOS/RHEL 環境)

# 1. 安裝 Perl 依賴
yum -y install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker
yum -y install perl-DBI perl-DBD-MySQL
yum -y install perl-CPAN

# 2. 透過 CPAN 安裝必要模組
perl -MCPAN -e shell
# 進入 CPAN 提示符後輸入:
cpan > install YAML
cpan > install Time::HiRes
# 遇到提示均輸入 yes

# 3. 下載並編譯安裝 mysqlsla
wget https://hackmysql.com/scripts/mysqlsla-2.03.tar.gz
tar xvfz mysqlsla-2.03.tar.gz
cd mysqlsla-2.03
perl Makefile.PL
make && make install

基本使用語法

mysqlsla -lt slow -sort t_sum -top 1000 /tmp/slow_query.log

參數說明:

  • -lt slow:指定日誌類型為慢查詢日誌
  • -sort t_sum:按總執行時間降序排序(預設)
  • -top 1000:顯示前 1000 條分析結果

輸出報表關鍵指標解讀

Report for slow logs: slowquery.log
1.59k queries total, 69 unique
Sorted by 't_sum'
Grand Totals: Time 109 s, Lock 0 s, Rows sent 142.02k, Rows Examined 21.26M
______________________________________________________________________ 001 ___
Count : 26 (1.64%)
Time : 6.121513 s total, 235.443 ms avg, 202.917 ms to 311.527 ms max (5.63%)
  95% of Time : 5.538256 s total, 230.761 ms avg, 202.917 ms to 271.056 ms max
Lock Time (s) : 2.407 ms total, 93 µs avg, 84 µs to 139 µs max (1.55%)
  95% of Lock : 2.152 ms total, 90 µs avg, 84 µs to 99 µs max
Rows sent : 0 avg, 0 to 0 max (0.00%)
Rows examined : 153.68k avg, 153.67k to 153.69k max (18.79%)
Database :
Users :
  root@localhost 127.0.0.1 : 100.00% (26) of query, 100.00% (1586) of all users

Query abstract:
SET timestamp=N; SELECT order_pid FROM wfc_delivery WHERE ( order_pid IN (S1) ) AND ( status IN (S3) ) GROUP BY order_pid;

Query sample:
SET timestamp=1387964641;
SELECT `order_pid` FROM `wfc_delivery` WHERE ( `order_pid` IN ('8831') ) AND ( `status` IN ('1','4','24') ) GROUP BY order_pid;

核心欄位含義

欄位含義
CountSQL 執行次數及佔總慢查詢百分比
Time總時間、平均時間、最小/最大時間、佔總慢查詢時間百分比
95% of Time去除最快/最慢 5% 後,覆蓋 95% 執行時間的統計
Lock Time等待鎖的總/平均/最小/最大時間
Rows sent返回結果行數統計
Rows examined掃描行數統計(關鍵效能指標)
Query abstract抽象化後的 SQL 模板(參數化)
Query sample實際執行的 SQL 範例

常用進階參數

參數說明範例
-log-type (-lt)指定日誌類型:slow, general, binary, msl, udl-lt slow
-sort排序依據:t_sum(總時間), c_sum(總次數), c_sum_p(次數佔比)-sort c_sum
-top顯示前 N 條結果,預設 10-top 50
-statement-filter (-sf)過濾 SQL 類型:+SELECT,+INSERT 或 -UPDATE 等-sf "+SELECT,INSERT"
-db只分析指定資料庫的日誌-db funsion

實戰範例:分析特定資料庫的 SELECT 語句

# 只取 funsion 資料庫的 SELECT 語句,按總時間排序,取前 1000 條,輸出到文件
mysqlsla -lt slow -sort t_sum -sf "+SELECT" -db funsion -top 1000 /tmp/slow_query.log > ./slow_query.pretty.log

開啟 MySQL 慢查詢日誌 (my.cnf 配置)

[mysqld]
log_slow_queries = ON
log-slow-queries = /tmp/slow_query.log
long_query_time = 1

修改後需重啟 MySQL 服務生效。long_query_time=1 表示記錄執行超過 1 秒的查詢。

總結

mysqlsla 透過多維度統計與排序,能幫助 DBA 快速鎖定最耗資源的 SQL 語句。結合 Rows examined、Lock Time 等指標,配合 EXPLAIN 分析執行計劃,可高效優化慢查詢。

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