今天debug,發(fā)現(xiàn)一個update語句需要執(zhí)行好久,等待一段時間后報錯:
Lock wait timeout exceeded; try restarting transaction
Spring事物造成數(shù)據(jù)庫死鎖,Mysql數(shù)據(jù)庫采用InnoDB引擎,默認參數(shù):innodb_lock_wait_timeout設置鎖等待的時間是50s,一旦數(shù)據(jù)庫鎖超過這個時間就會報錯。
解決方案
- 查詢正在執(zhí)行中的事物
select * from information_schema.innodb_trx
trx_state 事務狀態(tài):RUNNING、LOCK WAIT、ROLLING BACK 和 COMMITTING。
- 找到
trx_state為RUNNING或者LOCKWAIT的事物,根據(jù)事務線程IDtrx_mysql_thread_id殺掉事務。
kill 153346
參考: