掌握 SQL 執行頻率與類型分佈,是存儲引擎選型、索引優化、架構擴容的數據基礎。MySQL 透過 `SHOW [SESSION|GLOBAL] STATUS` 即時暴露服務器計數器,本文詳細解讀核心 `Com_*` 與 `Innodb_*` 指標,並說明如何據此判斷讀寫比例、選擇 InnoDB/MyISAM 及發現應用層問題。
SHOW SESSION STATUS:當前連線統計 (預設)。SHOW GLOBAL STATUS:實例啟動以來累計統計。mysqladmin extended-status。| 變數 | 含義 | 累計邏輯 |
|---|---|---|
| Com_select | SELECT 執行次數 | 每次查詢 +1 |
| Com_insert | INSERT 執行次數 | 批次插入僅 +1 |
| Com_update | UPDATE 執行次數 | 每次執行 +1 |
| Com_delete | DELETE 執行次數 | 每次執行 +1 |
| Com_commit | 事務提交次數 | 含隱式提交 |
| Com_rollback | 事務回滾次數 | 頻繁回滾提示應用邏輯/異常處理異常 |
應用: 計算 `Com_update / Com_select` 比例,判斷讀寫負載特徵。更新密集型負載傾向選 InnoDB (行鎖、MVCC、崩潰恢復);純讀/多讀少寫 可考慮 MyISAM (全表鎖、無事務開銷、全文索引舊版優勢)。
| 變數 | 含義 |
|---|---|
| Innodb_rows_read | SELECT 返回總行數 |
| Innodb_rows_inserted | INSERT 插入總行數 |
| Innodb_rows_updated | UPDATE 更新總行數 |
| Innodb_rows_deleted | DELETE 刪除總行數 |
差異:`Com_*` 計「語句次數」,`Innodb_rows_*` 計「影響行數」。批次操作差異巨大,結合分析可見平均每語句影響行數。
-- 獲取全域狀態
SHOW GLOBAL STATUS LIKE 'Com_%';
SHOW GLOBAL STATUS LIKE 'Innodb_rows_%';
SHOW GLOBAL STATUS LIKE 'Connections';
SHOW GLOBAL STATUS LIKE 'Uptime';
SHOW GLOBAL STATUS LIKE 'Slow_queries';
-- 粗略 QPS 估算
SELECT VARIABLE_VALUE INTO @uptime FROM performance_schema.global_status WHERE VARIABLE_NAME='Uptime';
SELECT (VARIABLE_VALUE/@uptime) AS QPS FROM performance_schema.global_status WHERE VARIABLE_NAME='Com_select';
定期採集 `GLOBAL STATUS` 快照、建立基線、設定告警閾值 (如 `Slow_queries` 突增、 `Com_rollback` 異常高、 `Connections` 飛升),是資料庫運行維護的基本功。結合 `performance_schema`、 `sys schema`、慢查詢日誌、 `pt-query-digest` 形成完整觀測體系。