诡异的Mysql连接中断导致的事务‘失联‘
一次连接超时,连接被关掉,提交事务时,发现连接已关闭,MySQL 里活跃事务列表还在(线程没收到 rollback/commit),事务“悬而未决”,它加的 行锁/间隙锁 不会自动释放。重试线程用新连接再开事务,想改同一批行,被悬事务堵死。
每次重试事务等待时间 > innodb_lock_wait_timeout(默认 50 s)→ InnoDB 回滚当前语句并抛异常。一直等到 ‘失联事务’ 自觉发现连接超时了(wait_timeout )自动释放锁。
事故描述
凌晨日切时间,外部系统通过rocketmq消息更新本地借据表数据。
update xd_loan SET over_due_days = 891, over_due_status = 'M7', loan_bal = 416.69, date_stat = '2025-10-24', status = 'OD', compensate_type = 'NCP' where loan_no = '346289980390121787393'
运维监控,发了10封慢sql告警邮件,显示超时10多秒,30多秒,50多秒。
照理说每天凌晨会有几百万数据更新,不应该只有这条语句有问题。
单表总量2千多万,且loan_no是唯一索引,不该出现慢sql问题,而且还重试了这么多次。
