锁等待超时Lock wait timeout

锁等待超时的问题
首先,通过命令查询下当前正在执行的事务
SELECT * FROM information_schema.innodb_trx;

trx_mysql_thread_id 这个字段是执行这个事务的线程Id
首先尝试 kill 这个线程
之后重新执行操作,发现仍然出现新的超时事物,考虑到锁等待超时可能不是并发导致的死锁问题
查询代码,发现是调用第三方接口请求超时导致的
注意:本地环境和测试环境网络不同,本地环境可能可以请求通第三方接口,而测试环境则请求不同,socket超时,而http请求还有可能有重试的机制(比如okhttp),因此可能socket超时时间就超过了锁等待超时时间,报错就显示的是锁等待超时,而不是socket超时,但根本原因是因为socket超时引起的
查询mysql锁等待时间命令
-- innodb_lock_wait_timeout 为锁等待超时时间,也是事务超时时间,可以手动设置
SHOW VARIABLES LIKE '%timeout%';

---
浙公网安备 33010602011771号