后端岗位面试题更新 2026-08-05

在 MySQL 里,如果某个事务长时间不结束,会引发哪些常见故障或性能隐患?

后端开发性能优化风险判断技术原理MySQL

考察说明

考查对长事务在锁、日志、一致性、并发等方面的连锁影响的理解。

回答思路

  1. 【回答框架 1】长事务指执行时间过长或迟迟未提交的事务,核心风险来自其持有的锁和积累的 undo 日志。它会导致相关行或间隙的锁长时间不释放,阻塞其他事务的更新或插入,降低并发度,甚至引发锁等待超时。
  2. 【回答框架 2】事务期间积累的大量 undo 日志会撑大回滚段,导致 undo 表空间膨胀;同时 undo 链变长,后续查询需要回溯更多版本,降低普通查询和 RR 隔离级别下快照读的效率。
  3. 【回答框架 3】若事务长时间持有写锁,会阻塞 DDL 或导致主从复制延迟,因为从库重放 binlog 时也可能被类似锁阻塞;长事务还增加死锁概率和锁等待链长度。
  4. 【回答框架 4】长事务会推迟 purge 线程清理历史版本,导致 undo 无法及时回收,可能触发磁盘占用激增;极端情况下还会影响 buffer pool 命中率或引发慢查询。
  5. 【回答框架 5】应通过监控 innodb_trx 表定位长时间未提交事务,控制事务粒度,避免在事务内执行耗时操作或外部交互,必要时用超时和锁等待阈值兜底。
  6. 【关键点 1】长事务持有锁时间越长,阻塞和死锁概率越高。
  7. 【关键点 2】undo 日志膨胀会拉长版本链,拖慢读操作并占用存储。
  8. 【关键点 3】长事务可能引发主从延迟和 DDL 阻塞。
  9. 【关键点 4】应尽快提交或回滚事务,避免事务内做慢操作或远程调用。
  10. 【易错点 1】不要把长事务等同于大事务,二者有重合但不完全一致。
  11. 【易错点 2】不能只靠调整锁等待超时来解决,根本是缩短事务执行时间。
  12. 【易错点 3】在 RR 隔离级别下,长事务可能让 undo 无法及时清理,导致历史版本累积。