持锁长事务导致后续业务报等锁超时的解决办法 本节介绍了锁超时相关问题与解决方法。 场景描述 业务侧实例上报错误码1205,等锁超时提示。 TaurusDB error code MY001205 (ERLOCKWAITTIMEOUT): Lock wait timeout exceeded ; try restarting transaction 原因分析 1. 查看监控指标“行锁花费时间”,监控到行锁等待时间较长,说明该系统出现过锁冲突的现象。 监控指标详细内容请参考查看监控指标。 2. 登录实例,执行如下SQL,查看系统当前存在的长事务,以及事务持有的行锁信息。 select trxmysqlthreadid, trxid, trxstate, trxstarted, trxtableslocked, trxrowslocked, trxisolationlevel, trxquery, trxoperationstate from informationschema.innodbtrx order by trxstarted; informationschema.innodbtrx表包含了当前innodb内部正在运行的事务信息。 trxstarted:表示事务的开始时间,用来判断当前事务是否是长事务,当前时间减去开始时间就是事务的执行时间。 trxstate :表示当前事务的状态,取值如下: RUNNING:运行。 LOCK WAIT:等待锁 说明 如果事务当前的状态是LOCK WAIT,即表示事务持有行锁。 RUNNING:运行。 LOCK WAIT:等待锁 解决方案 由于持锁长事务长时间未提交或回滚导致后续操作阻塞,如果持锁长事务已经阻塞了后续的业务,需要将长事务KILL,后续业务侧尽量避免持锁长事务。