QPS (Query Per Second) 與 TPS (Transaction Per Second) 是衡量資料庫處理能力的核心指標。本文詳細說明手動計算方法、狀態變數含義,並提供自動化監控腳本思路。
| 指標 | 全稱 | 含義 | 核心狀態變數 |
|---|---|---|---|
| QPS | Queries Per Second | 每秒執行的查詢總數 (含 SELECT/INSERT/UPDATE/DELETE 等) | Questions 或 Queries |
| TPS | Transactions Per Second | 每秒提交的事務數 (含提交 + 回滾) | Com_commit + Com_rollback |
mysql> SHOW GLOBAL STATUS LIKE 'Questions'; mysql> SHOW GLOBAL STATUS LIKE 'Com_commit'; mysql> SHOW GLOBAL STATUS LIKE 'Com_rollback';
# 例如間隔 10 秒 sleep 10 mysql> SHOW GLOBAL STATUS LIKE 'Questions'; -- 記錄 Q2 mysql> SHOW GLOBAL STATUS LIKE 'Com_commit'; -- 記錄 C2 mysql> SHOW GLOBAL STATUS LIKE 'Com_rollback'; -- 記錄 R2
QPS = (Q2 - Q1) / 10 TPS = (C2 - C1 + R2 - R1) / 10
Questions:客戶端發送的語句數 (不含預處理內部命令)Queries:Server 執行的語句數 (含存儲過程內部調用),通常 ≥ QuestionsCom_commit:顯式 COMMIT 次數Com_rollback:顯式 ROLLBACK 次數Com_select、Com_insert、Com_update、Com_delete:各類 DML 計數#!/bin/bash
# monitor_qps_tps.sh
HOST=127.0.0.1
USER=monitor
PASS=monitor_pass
INTERVAL=10
get_status() {
mysql -h$HOST -u$USER -p$PASS -sN -e "SHOW GLOBAL STATUS LIKE '$1';" | awk '{print $2}'
}
while true; do
Q1=$(get_status Questions)
C1=$(get_status Com_commit)
R1=$(get_status Com_rollback)
sleep $INTERVAL
Q2=$(get_status Questions)
C2=$(get_status Com_commit)
R2=$(get_status Com_rollback)
QPS=$(( (Q2 - Q1) / INTERVAL ))
TPS=$(( (C2 - C1 + R2 - R1) / INTERVAL ))
echo "$(date '+%F %T') QPS=$QPS TPS=$TPS" >> /var/log/mysql_qps_tps.log
done
Threads_running、Innodb_row_lock_waits、Slow_queries、Select_scan (全表掃描)Questions 與 Queries:監控系統請明確選擇其一並保持一致Com_rollback:高回滾率可能暗示應用邏輯缺陷或死鎖頻發QPS/TPS 是資料庫健康度的「心率與血壓」。建立自動化采集、基線建模與多維告警,才能在故障發生前發現異常,從容應對流量洪峰。