标准答案
- 锁持有时间越长,其他事务越容易排队、超时或形成死锁,最终拖慢整个连接池。
- MVCC 系统中的长快照会阻止旧版本清理,造成 undo、表膨胀或垃圾回收压力。
- 大事务或长时间未提交的变更会增加复制传输与回放压力,副本延迟后读写分离更容易读到旧数据。
- 在线 DDL、索引变更和迁移可能需要等待旧事务结束,导致发布操作卡住或扩大锁窗口。
- 外部调用、文件处理、用户交互和长计算应移出事务,拆成短事务加状态记录或异步流程。
题目解析
长事务不只是某一条 SQL 慢,也可能是应用在开启事务后等待 RPC、消息确认或人工操作。排查时要找事务开始时间、最后活动 SQL、连接来源和它阻塞的下游链路。
批量任务应按可控批次提交,并设计断点、幂等和回滚边界。一次把百万行放进单个事务,理论上原子,实践中却会压垮锁、日志、复制和恢复。
常见误区
- 只优化单条 SQL,却忽略代码层在事务中调用了慢服务。
- 为保证“全量一致”把超大数据修复做成一个事务,导致线上长期阻塞。