已采纳
回答正文
回复
讨论正文
该问题的正文与回答。
MySQL 8.0.32,一主一从架构,binlog_format=ROW,从库已开并行复制(slave_parallel_workers=8,slave_parallel_type=LOGICAL_CLOCK)。业务表 t_settlement 约 8000 万行,InnoDB,主键 id,业务键 order_no(唯一索引)。
业务侧一个定时任务执行:
UPDATE t_settlement
SET status = 'PAID'
WHERE status = 'PENDING'
AND settle_time < NOW() - INTERVAL 3 DAY;
单次影响约 45–55 万行。从库 Seconds_Behind_Master 从 2s 飙到 1200s+,持续约 20 分钟才追平。期间从库上 read-only 的查询接口 P99 从 15ms 涨到 300ms+,replay 线程把 CPU 打满。
LIMIT 100000,批间 SLEEP(2)。从库延迟仍出现 8–12 分钟尖峰,峰值降低了但窗口没缩。parallel_type=LOGICAL_CLOCK 对单表大事务帮助有限?pt-online-schema-change 的思路改写?我关心的是可落地的操作方案 + 背后的原理,而不是"加机器"或"上分库"。