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

MySQL 從庫 Com_insert 為零之謎:ROW 格式 Binlog 繞過 Server 層計數器的深度解析

     編輯:MySQL 綜合教學

現象複現

-- 主庫狀態
Com_select: 0   Com_insert: 92   Com_delete: 20

-- 從庫狀態
Com_select: 95  Com_insert: 0    Com_delete: 0

差異點:主庫 binlog_format = ROW,從庫同步的寫入操作完全未反映在 Com_insert 計數器中。

機制深度解析

1. Com_xxx 計數器本質

定義於 MySQL Server 層 sql/sql_show.cc,在 dispatch_command() 解析到對應語句類型時遞增。僅統計「經過 SQL 解析層的語句執行次數」。

2. Statement 格式復制流程

主庫:客戶端 INSERT 語句 → Parser → Optimizer → Executor → Engine
                    ↓
              Com_insert++(Server 層)
                    ↓
              Binlog 記錄原始 SQL 文本
                    ↓
從庫:SQL 線程讀取 Relay Log → Parser → Optimizer → Executor → Engine
                    ↓
              Com_insert++(Server 層)✓

3. ROW 格式復制流程(關鍵差異)

主庫:客戶端 INSERT 語句 → Parser → Optimizer → Executor → Engine
                    ↓
              Com_insert++(Server 層)
                    ↓
              Binlog 記錄「行變更事件」(Table_map + Write_rows)
                    ↓
從庫:SQL 線程讀取 Relay Log → **直接調用 Engine 接口 write_row()**
                    ↓
              **繞過 Parser/Optimizer/Executor**
                    ↓
              **Com_insert 不遞增** ✗

官方文檔佐證

「You cannot examine the logs to see what statements were executed, nor can you see on the slave what statements were received from the master and executed.」 —— MySQL 5.5 參考手冊 17.1.2 Replication Formats

從庫在 ROW 模式下看不到 SQL 語句,自然無法在 Server 層計數。

正確監控指標體系

指標層級統計對象受 Binlog 格式影響推薦場景
Com_insertServerINSERT 語句次數是(ROW 格式從庫為 0)Statement/Mixed 格式主從對比
Innodb_rows_insertedEngine實際插入行數否**所有格式通用,首選指標**
Innodb_rows_updatedEngine實際更新行數否寫入量監控
Innodb_rows_deletedEngine實際刪除行數否寫入量監控

實戰監控建議

  1. 統一採集 Engine 層指標:監控系統(Prometheus/Zabbix)默認採集 Innodb_rows_inserted/updated/deleted,忽略 Com_xxx。
  2. 主從一致性校驗:定期比對 master.Innodb_rows_inserted - slave.Innodb_rows_inserted,差值超過閾值報警。
  3. 混合場景兼容:若集群存在 Statement/ROW 混合實例,僅使用 Engine 層指標構建統一儀表板。

總結

Com_insert 為零不是故障,是 ROW 格式復制架構決定的必然結果。 從庫 SQL 線程直接調用存儲引擎接口重放行變更,繞過 SQL 解析層,導致 Server 層計數器失效。運維監控體系必須遷移至 Innodb_rows_xxx 系列指標,才能獲得格式無關、真實反映寫入量的度量值。

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