mysql Lock wait timeout exceeded; try restarting transaction 錯誤解決

最近運行的項目中,出現 'Lock wait timeout exceeded; try restarting transaction' 報錯,導致出現一系列問題。

一直運行的很平穩,突然出現這問題,比較難判斷哪裏出了問題。

先上網搜索,參考:
	關於MySQL的lock wait timeout exceeded解決方案
		https://segmentfault.com/a/1190000015314171

	記一次MySQL的Lock Wait Timeout exceeded異常
		https://lijh.dev/2019/03/13/%E8%AE%B0%E4%B8%80%E6%AC%A1MySQL%E7%9A%84Lock%20Wait%20Timeout%20exceeded%E5%BC%82%E5%B8%B8/

	MySql Lock wait timeout exceeded該如何處理?
		https://ningyu1.github.io/site/post/75-mysql-lock-wait-timeout-exceeded/

	Laravel Database——數據庫的 CRUD 操作源碼分析(未看)
		https://learnku.com/articles/6104/laravel-database-analysis-of-the-crud-operation-source-code-of-the-database

根據錯誤提示,以及上網搜索,得到錯誤的原因:
	因某些事務,導致了 mysql 表被鎖,後續又有新的事務,一些在等待之前的事務結束,等待時間超時,就提示該錯誤

解決方法:
	select * from information_schema.innodb_trx

	得到 RUNNING 的事務 pid(導致阻塞的事務ID)

	然後在 mysql 命令行中,執行:kill pid

上面的解決方法,只是臨時解決下,根本的解決方法,是我們需要定位到代碼中,導致該事務阻塞的原因。

我這邊的代碼問題是:
	執行隊列代碼時,開啓了事務,中途因其他服務,導致代碼終止,未進行回滾操作,所以事務一直運行,導致鎖表,從而導致後續的請求,所有關於該表的修改操作都等待,導致報錯!


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章