更新脚本放在一个事务里改十万行 跑起来回滚日志涨到几十个 G 表被整段锁住 业务写入全部排队超时。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,单事务太大 回滚段和行锁一直持有到提交那一刻 中途失败还要整体回滚重来 时间越拖越长 并发全被堵在锁上 谁也进不来。

「批处理分批提交」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

UPDATE orders SET status = 'done'
  WHERE id > 0 AND id <= 5000 AND status = 'pending';
COMMIT;
-- 下一批从 5001 开始 逐批推进

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

具体做法是,按主键区间分批处理 每批五千行提交一次事务;每批之间停顿几十毫秒 给其他业务会话让出锁;记录每批的最大主键 失败后从这一批接着往下走。

最后用这个标准收尾,回滚日志增长平缓 业务写入没有超时 处理总行数与预期一致。

作者 9823189