今天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
設(shè)置鎖等待的時間是50s
昌讲,一旦數(shù)據(jù)庫鎖超過這個時間就會報錯。
解決方案
- 查詢正在執(zhí)行中的事物
select * from information_schema.innodb_trx
trx_state
事務(wù)狀態(tài):RUNNING
鹏控、LOCK WAIT
、ROLLING BACK
和 COMMITTING
趁窃。
- 找到
trx_state
為RUNNING
或者LOCKWAIT
的事物牧挣,根據(jù)事務(wù)線程IDtrx_mysql_thread_id
殺掉事務(wù)。
kill 153346
參考: