【MySQL】事務(wù)沒(méi)有提交導(dǎo)致鎖等待Lockwaittimeoutexceeded異常的處理辦法
java.lang.Exception:
### Error updating database. Cause:java.sql.SQLException: Lock wait timeout exceeded; try restartingtransaction
### The error may involve defaultParameterMap
### The error occurred while setting parameters
### Cause: java.sql.SQLException: Lock wait timeout exceeded; tryrestarting transaction
; SQL []; Lock wait timeout exceeded; try restarting transaction;nested exception is java.sql.SQLException: Lock wait timeoutexceeded; try restarting transaction
select * from information_schema.innodb_trx之后找到了一個(gè)一直沒(méi)有提交的事務(wù)烤芦。
kill 到了對(duì)應(yīng)的線(xiàn)程后ok了。
查看所有的進(jìn)程列表:show processlist
=============================================
MySQL 5.5 -- innodb_lock_wait 鎖 等待
記得以前析校,當(dāng)出現(xiàn):ERROR 1205(HY000): Lock wait timeout exceeded; try restartingtransaction构罗,
要解決是一件麻煩的事情 ;
特別是當(dāng)一個(gè)SQL執(zhí)行完了智玻,但未COMMIT遂唧,后面的SQL想要執(zhí)行就是被鎖,超時(shí)結(jié)束吊奢;
DBA光從數(shù)據(jù)庫(kù)無(wú)法著手找出源頭是哪個(gè)SQL鎖住了盖彭;
有時(shí)候看看show engine innodb status , 并結(jié)合 show full processlist;能暫時(shí)解決問(wèn)題;但一直不能精確定位;
在5.5中召边,information_schema庫(kù)中增加了三個(gè)關(guān)于鎖的表(MEMORY引擎)铺呵;
innodb_trx ## 當(dāng)前運(yùn)行的所有事務(wù)
innodb_locks ## 當(dāng)前出現(xiàn)的鎖
innodb_lock_waits ## 鎖等待的對(duì)應(yīng)關(guān)系
數(shù)據(jù)庫(kù)配置文件修改:
原因:原因是你使用的InnoDB? 表類(lèi)型的時(shí)候,
默認(rèn)參數(shù):innodb_lock_wait_timeout設(shè)置鎖等待的時(shí)間是50s,
因?yàn)橛械逆i等待超過(guò)了這個(gè)時(shí)間,所以抱錯(cuò).
你可以把這個(gè)時(shí)間加長(zhǎng),或者優(yōu)化存儲(chǔ)過(guò)程,事務(wù)避免過(guò)長(zhǎng)時(shí)間的等待.
解決的辦法有兩個(gè):
第一:innodb_lock_wait_timeout 鎖定等待時(shí)間改大
my.ini文件:
#innodb_lock_wait_timeout = 50
修改為
innodb_lock_wait_timeout = 500