事务锁超时错误表现为“Lock wait timeout exceeded; try restarting transaction”是因事务等待行/页锁超时默认50秒而非连接或语法错误需查INNODB_TRX与INNODB_LOCK_WAITS定位阻塞事务KILL blocking_thread而非报错线程并从应用事务控制、索引优化、配置调优三方面预防。事务锁超时错误长什么样先认准 Lock wait timeout exceeded遇到 Lock wait timeout exceeded; try restarting transaction基本可以断定是事务在等锁时超时了不是连接超时、也不是 SQL 语法错。MySQL 默认的锁等待上限是 innodb_lock_wait_timeout50 秒注意这个值不等于 wait_timeout 或 interactive_timeout。它只控制「一个事务等待另一行/页锁的时间」超时后当前语句直接报错回滚但持有锁的那个事务还活着。常见诱因包括– 长事务没提交一直占着锁– 应用层异常退出没显式 COMMIT 或 ROLLBACK– 手动执行了未提交的 UPDATE 或 DELETE比如在客户端工具里改了几行就走开了– 并发写同一行且其中一方卡在慢查询、网络延迟或应用逻辑里怎么立刻查到谁在锁、谁在等用 INFORMATION_SCHEMA.INNODB_TRX 和 INNODB_LOCK_WAITS别急着 kill先看清楚现场。这两张表是 InnoDB 实时状态快照比 SHOW PROCESSLIST 更精准后者看不到锁等待关系。常用组合查询SELECT t1.TRX_ID waiting_trx_id, t1.TRX_MYSQL_THREAD_ID waiting_thread, t1.TRX_QUERY waiting_query, t2.TRX_ID blocking_trx_id, t2.TRX_MYSQL_THREAD_ID blocking_thread, t2.TRX_QUERY blocking_queryFROM INFORMATION_SCHEMA.INNODB_TRX t1INNER JOIN INFORMATION_SCHEMA.INNODB_LOCK_WAITS w ON t1.TRX_ID w.BLOCKING_TRX_IDINNER JOIN INFORMATION_SCHEMA.INNODB_TRX t2 ON w.BLOCKING_TRX_ID t2.TRX_ID;关键点– t1 是正在等锁的事务报错方– t2 是持锁不放的事务真凶– 如果查不到结果说明锁已释放或是死锁被自动检测并回滚了此时日志里会有 Deadlock found– 注意 TRX_STARTED 时间如果某个事务运行了几十分钟基本就是它的问题KILL 谁为什么不能只 KILL 报错的线程报错的线程只是“等锁失败”真正要 KILL 的是 blocking_thread即上面查出的 t2.TRX_MYSQL_THREAD_ID。否则你杀掉等锁的锁还在下一个请求照样卡住。 Ideogram Ideogram是一个全新的文本转图像AI绘画生成平台擅长于生成带有文本的图像如LOGO上的字母、数字等。