| 方案 | 效果 | 成本 |
|---|---|---|
| 遷移至 MariaDB(真並行復制) | ⭐⭐⭐⭐⭐ | 低(兼容替換) |
| 更換 SSD/NVMe/PCIe SSD | ⭐⭐⭐⭐⭐ | 中高 |
加大內存,調大 innodb_buffer_pool_size | ⭐⭐⭐⭐ | 中 |
| 文件系統 XFS/ReiserFS 替代 ext3/4 | ⭐⭐⭐ | 低 |
| RAID 10 / SSD RAID 1/5/50 | ⭐⭐⭐ | 中 |
| RAID 卡寫緩存策略 WB/Force WB | ⭐⭐ | 低 |
| I/O 調度器 deadline/noop(SSD) | ⭐⭐ | 零 |
check_ins_slave_lag (err_cnt:1) critical-slavelag on ins:3306=39438
SHOW SLAVE STATUS Position 不動SHOW OPEN TABLES 某表 In_use=1 持續SHOW CREATE TABLE 確認無主鍵/弱索引修復:
# 1. 找高區分度列 SELECT COUNT(*) FROM t; SELECT COUNT(*) FROM (SELECT DISTINCT col1,col2 FROM t) x; # 2. 從庫停止復制 STOP SLAVE; # 3. 關閉 Binlog 記錄本次 DDL SET SQL_LOG_BIN=0; ALTER TABLE t ADD KEY idx_col1_col2(col1,col2); -- 新索引放最前 # 4. 啟動復制 START SLAVE; # 5. 觀察 SHOW ENGINE INNODB STATUS 中 rows_inserted/updated/deleted 回升
SHOW FULL PROCESSLIST 看到具體慢 SQLINSERT...SELECT(含 GROUP BY/JOIN) → Master 改 binlog_format=ROW
Binlog 顯示單事務巨大事件。
對策:與開發溝通,引入緩存異步寫入、拆分大事務。

xtrabackup 末尾 FLUSH TABLES WITH READ LOCK 鎖 MyISAM 表根治:**全量遷移至 InnoDB**,MyISAM 歷史使命已終結。
FLUSH TABLES WITH READ LOCK 等待 900s 超時。| 層面 | 關鍵動作 |
|---|---|
| 架構 | MariaDB 並行復制、分庫分表、異步寫入 |
| 硬件 | SSD、大內存、XFS、RAID10、WB 緩存、deadline 調度器 |
| Schema | 強制主鍵、合理索引、去 MyISAM |
| 運維 | 監控報警、定位現象對應修復、預熱工具 |
| 應用 | 合併寫入、拆大事務、讀寫分離 |
**沒有銀彈,只有分層組合拳。** 持續監控、快速定位、針對性修復,將延遲控制在業務可接受範圍內。