前言
SHOW STATUS 是 MySQL 內建的儀表盤,提供 300+ 狀態變數,涵蓋連線、查詢、緩存、鎖、線程、複制等維度。善用它能在不安裝額外監控工具的情況下,快速掌握服務器健康狀態、發現異常模式。本文詳解語法、作用域、核心指標與實戰監控場景。
一、語法與作用域
SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern' | WHERE expr]
GLOBAL:自啟動以來所有連線的累計值(推薦運維使用)
SESSION(預設,別名 LOCAL):當前連線的統計值
LIKE 支援 %、_ 通配符
範例
-- 全域啟動時間(秒)
SHOW GLOBAL STATUS LIKE 'Uptime';
-- 全域 SELECT 總次數
SHOW GLOBAL STATUS LIKE 'Com_select';
-- 當前連線線程狀態
SHOW STATUS LIKE 'Thread_%';
二、核心監控指標分類
1. 服務器基本狀態
| 變數 | 含義 | 關注重點 |
Uptime | 服務器運行秒數 | 重啟檢測、運行時長 |
Questions | 發送給服務器的語句總數 | QPS 計算分母 |
Queries | 執行的語句總數(含存儲程序內部) | — |
2. 查詢統計(QPS 核心)
| 變數 | 含義 | 公式/用途 |
Com_select | SELECT 執行次數 | 讀負載基準 |
Com_insert | INSERT 執行次數 | 寫負載基準 |
Com_update | UPDATE 執行次數 | — |
Com_delete | DELETE 執行次數 | — |
Com_replace | REPLACE 執行次數 | — |
Com_commit | COMMIT 次數 | 事務吞吐 |
Com_rollback | ROLLBACK 次數 | 事務失敗率 = Rollback / Commit |
QPS 計算:(Com_select + Com_insert + Com_update + Com_delete + Com_replace) / 間隔秒數
3. 連線與線程
| 變數 | 含義 | 異常判斷 |
Connections | 嘗試連線總數(含失敗) | 突增 = 應用連線風暴或攻擊 |
Max_used_connections | 歷史峰值並發連線數 | 接近 max_connections 需擴容 |
Threads_connected | 當前開啟連線數 | 即時並發 |
Threads_running | 當前活躍(非睡眠)線程數 | 持續高 = 慢查詢堆積 |
Threads_created | 歷史建立線程總數 | 快速增長 = 需增大 thread_cache_size |
Threads_cached | 線程緩存池中閒置線程數 | — |
Aborted_connects | 中斷的連線嘗試 | 網路/認證問題 |
Aborted_clients | 異常斷開的客戶端連線 | 應用未正確關閉連線 |
4. 鎖與表
| 變數 | 含義 | 異常判斷 |
Table_locks_immediate | 立即獲得表鎖次數 | — |
Table_locks_waited | 等待表鎖次數 | 高 = 鎖爭用嚴重,優化查詢/拆表/讀寫分離 |
Open_tables | 當前開啟表數 | 接近 table_open_cache 需調大 |
Opened_tables | 歷史打開表總數 | 快速增長 = table_open_cache 過小 |
5. InnoDB 核心指標(需配合 SHOW ENGINE INNODB STATUS)
| 變數 | 含義 |
Innodb_buffer_pool_read_requests | 緩存池讀請求次數 |
Innodb_buffer_pool_reads | 緩存未命中需磁碟讀次數 |
Innodb_buffer_pool_pages_free | 空閒頁數 |
Innodb_buffer_pool_pages_total | 總頁數 |
Innodb_rows_read | 讀取行數 |
Innodb_rows_inserted | 插入行數 |
Innodb_rows_updated | 更新行數 |
Innodb_rows_deleted | 刪除行數 |
Innodb_log_waits | 日誌緩存滿等待次數 |
Innodb_log_writes | 日誌物理寫入次數 |
緩存命中率 = 1 - (Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests),建議 > 99%
6. 複制相關
| 變數 | 含義 |
Slave_running | 從庫 SQL/IO 線程狀態(ON/OFF) |
Seconds_Behind_Master | 主從延遲秒數(需從 SHOW SLAVE STATUS 獲取) |
三、實戰監控腳本範例
1. 一鍵健康檢查
#!/bin/bash
mysql -e "
SHOW GLOBAL STATUS LIKE 'Uptime';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
SHOW GLOBAL STATUS LIKE 'Threads_running';
SHOW GLOBAL STATUS LIKE 'Com_select';
SHOW GLOBAL STATUS LIKE 'Com_insert';
SHOW GLOBAL STATUS LIKE 'Com_update';
SHOW GLOBAL STATUS LIKE 'Com_delete';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests';
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads';
SHOW GLOBAL STATUS LIKE 'Table_locks_waited';
SHOW GLOBAL STATUS LIKE 'Slow_queries';
"
2. 計算關鍵比率
# 緩存命中率
READ_REQ=$(mysql -sNe "SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_read_requests'" | awk '{print $2}')
READS=$(mysql -sNe "SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_reads'" | awk '{print $2}')
HIT_RATE=$(echo "scale=4; 1 - $READS / $READ_REQ" | bc)
echo "InnoDB Buffer Pool Hit Rate: $HIT_RATE"
# 鎖等待率
LOCK_IMM=$(mysql -sNe "SHOW GLOBAL STATUS LIKE 'Table_locks_immediate'" | awk '{print $2}')
LOCK_WAIT=$(mysql -sNe "SHOW GLOBAL STATUS LIKE 'Table_locks_waited'" | awk '{print $2}')
WAIT_RATE=$(echo "scale=4; $LOCK_WAIT / ($LOCK_IMM + $LOCK_WAIT)" | bc)
echo "Table Lock Wait Rate: $WAIT_RATE"
四、常見異常模式與對策
| 現象 | 可能原因 | 對策 |
Threads_created 快速增長 | thread_cache_size 過小 | 調大至 100~500,觀察 Threads_cached |
Table_locks_waited / Table_locks_immediate > 1% | 鎖爭用、長事務、缺索引 | 優化慢查詢、拆熱點表、讀寫分離 |
Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests > 1% | 緩存池過小、冷數據訪問 | 調大 innodb_buffer_pool_size、預熱 |
Slow_queries 持續增長 | 新上線慢 SQL、索引失效 | 跑 pt-query-digest、加索引/改 SQL |
Aborted_clients 增長 | 應用連線池配置錯誤、超時未處理 | 檢查連線池 maxLifeTime、idleTimeout |
五、進階:配合 performance_schema 與 sys schema
MySQL 5.7+ performance_schema、sys schema 提供更細粒度、更易讀的監控視圖:
sys.metrics:核心指標儀表盤
sys.session / sys.processlist:增強版進程列表
sys.schema_table_statistics:表級 IO/延遲統計
sys.user_summary:用戶級資源消耗
建議:日常巡檢用 SHOW GLOBAL STATUS 快速掃描;深度排查用 sys schema 視圖。
結語
SHOW STATUS 是零成本、零部署的 MySQL 監控利器。熟記 20 個核心變數、建立定期採集基線、設定告警閾值,能讓你在用戶感知故障前發現隱患。下一步:將關鍵指標接入 Prometheus + Grafana,打造可視化監控大盤。