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

Shell 腳本實戰:精準計算 MySQL 指定時間窗口 TPS

     編輯:MySQL 綜合教學

Shell 腳本實戰:精準計算 MySQL 指定時間窗口 TPS

TPS(Transactions Per Second)是衡量數據庫吞吐能力的核心指標。本文提供一個生產可用的 Bash 腳本,通過採樣 Com_insert、Com_update、Com_delete 計數器差值,計算任意時間窗口(如 10 秒)內的平均 TPS。

核心原理

TPS = (ΔCom_insert + ΔCom_update + ΔCom_delete) / 采樣間隔秒數

註:Com_commit + Com_rollback 亦可作為事務維度 TPS,視業務定義而定。

完整腳本(calc_tps.sh)

#!/bin/bash
# MySQL TPS 計算腳本 - 支援自定義採樣間隔
# 依賴:mysql client、awk、date

# ===== 配置區 =====
MYSQL_USER="root"
MYSQL_PASS="123"
MYSQL_HOST="localhost"
SLEEP_TIME=10          # 採樣間隔(秒),可通過 $1 傳參覆蓋
# ===================

# 顏色輸出函數
cecho() { local msg="${1:-No message}"; local color="${2:-black}"; printf "\033[${color}m%s\033[0m\n" "$msg"; }
cechon() { local msg="${1:-No message}"; local color="${2:-black}"; printf "\033[${color}m%s\033[0m" "$msg"; }

# 顏色碼映射
declare -A COL=( [red]=31 [green]=32 [yellow]=33 [blue]=34 [magenta]=35 [cyan]=36 [white]=37 )
color_code() { echo "${COL[$1]:-0}"; }

# 獲取計數器快照
get_counters() {
    local prefix="$1"
    mysql -h"$MYSQL_HOST" -u"$MYSQL_USER" -p"$MYSQL_PASS" -N -e \
        "SHOW GLOBAL STATUS WHERE Variable_name IN ('Com_insert','Com_update','Com_delete');" |
    awk -v p="$prefix" '{val[$1]=$2} END {print val["Com_insert"]+val["Com_update"]+val["Com_delete"]}'
}

# 主流程
cecho "正在獲取 TPS 基線值..." "cyan"
tps_start=$(get_counters "start")

cecho "等待 ${SLEEP_TIME}s 進行採樣..." "yellow"
sleep "$SLEEP_TIME"

cecho "獲取 TPS 結束值..." "cyan"
tps_end=$(get_counters "end")

# 計算
diff=$((tps_end - tps_start))
tps_avg=$(awk "BEGIN {printf \"%.2f\", $diff / $SLEEP_TIME}")

cechon "最近 ${SLEEP_TIME} 秒平均 TPS: " "cyan"
cecho "$tps_avg" "red"

使用示例

# 賦予執行權限
chmod +x calc_tps.sh

# 預設 10 秒採樣
./calc_tps.sh
# 輸出:最近 10 秒平均 TPS: 123.45

# 自定義 30 秒採樣
./calc_tps.sh 30

進階增強方向

  1. 持久化記錄:將時間戳、TPS 值寫入 CSV/InfluxDB,接入 Grafana 視覺化。
  2. 多維度指標:同時採樣 QPS(Questions/Com_select)、Threads_running、Innodb_row_lock_waits 等。
  3. 異常告警:TPS 突降/飆升超過閾值觸發 Webhook/郵件告警。
  4. 業務時間窗:結合 cron 僅在業務高峰期(如 09:00-18:00)高頻採樣,其餘低頻或暫停。

常見坑點提示

  • 權限最小化:監控賬號僅需 PROCESS、REPLICATION CLIENT 權限。
  • 計數器溢位:MySQL 計數器為 64 位無符號整數,極高負載長時間運行理論可能溢位,腳本可加溢位檢測邏輯。
  • 並發執行衝突:避免同一時間多個採樣進程連接數衝擊,建議單例運行或使用連接池。

總結

通過 SHOW GLOBAL STATUS 計數器差值法計算 TPS,實現簡單、開銷極低、無需額外插件。將腳本納入監控體系,配合可視化與告警,構建「可觀測」的 MySQL 性能基線。

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