-- 主庫狀態
Com_select: 0 Com_insert: 92 Com_delete: 20
-- 從庫狀態
Com_select: 95 Com_insert: 0 Com_delete: 0
差異點:主庫 binlog_format = ROW,從庫同步的寫入操作完全未反映在 Com_insert 計數器中。
定義於 MySQL Server 層 sql/sql_show.cc,在 dispatch_command() 解析到對應語句類型時遞增。僅統計「經過 SQL 解析層的語句執行次數」。
主庫:客戶端 INSERT 語句 → Parser → Optimizer → Executor → Engine
↓
Com_insert++(Server 層)
↓
Binlog 記錄原始 SQL 文本
↓
從庫:SQL 線程讀取 Relay Log → Parser → Optimizer → Executor → Engine
↓
Com_insert++(Server 層)✓
主庫:客戶端 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_insert | Server | INSERT 語句次數 | 是(ROW 格式從庫為 0) | Statement/Mixed 格式主從對比 |
| Innodb_rows_inserted | Engine | 實際插入行數 | 否 | **所有格式通用,首選指標** |
| Innodb_rows_updated | Engine | 實際更新行數 | 否 | 寫入量監控 |
| Innodb_rows_deleted | Engine | 實際刪除行數 | 否 | 寫入量監控 |
Innodb_rows_inserted/updated/deleted,忽略 Com_xxx。master.Innodb_rows_inserted - slave.Innodb_rows_inserted,差值超過閾值報警。Com_insert 為零不是故障,是 ROW 格式復制架構決定的必然結果。 從庫 SQL 線程直接調用存儲引擎接口重放行變更,繞過 SQL 解析層,導致 Server 層計數器失效。運維監控體系必須遷移至 Innodb_rows_xxx 系列指標,才能獲得格式無關、真實反映寫入量的度量值。