持鎖長事務導致后續業務報等鎖超時的解決辦法
更新時間 2025-03-27 10:41:18
最近更新時間: 2025-03-27 10:41:18
分享文章
本節介紹了鎖超時相關問題與解決方法。
場景描述
業務側實例上報錯誤碼1205,等鎖超時提示。
TaurusDB error code MY-001205 (ER_LOCK_WAIT_TIMEOUT): Lock wait timeout exceeded ; try restarting transaction
原因分析
- 查看監控指標“行鎖花費時間”,監控到行鎖等待時間較長,說明該系統出現過鎖沖突的現象。
監控指標詳細內容請參考查看監控指標。


- 登錄實例,執行如下SQL,查看系統當前存在的長事務,以及事務持有的行鎖信息。
select trx_mysql_thread_id, trx_id, trx_state, trx_started, trx_tables_locked, trx_rows_locked, trx_isolation_level, trx_query, trx_operation_state from information_schema.innodb_trx order by trx_started;


- information_schema.innodb_trx表包含了當前innodb內部正在運行的事務信息。
- trx_started:表示事務的開始時間,用來判斷當前事務是否是長事務,當前時間減去開始時間就是事務的執行時間。
- trx_state :表示當前事務的狀態,取值如下:
- RUNNING:運行。
- LOCK WAIT:等待鎖
說明如果事務當前的狀態是LOCK?WAIT,即表示事務持有行鎖。
RUNNING:運行。
LOCK WAIT:等待鎖
解決方案
由于持鎖長事務長時間未提交或回滾導致后續操作阻塞,如果持鎖長事務已經阻塞了后續的業務,需要將長事務KILL,后續業務側盡量避免持鎖長事務。