redis-queue 消费 偶尔锁住报错[MySQL]SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction

adminadmin

SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transactionSQLSTATE[HY000]:

redis-queue 消费代码如下

  // 启动事务
        Db::startTrans();
        try {
            $con[] = ['code', "=", $code];
            $r1 = Db::name("code")->where($con)->save($getnewdata);
            // 提交事务
            Db::commit();
        } catch (\Exception $e) {
            // 回滚事务
            Db::rollback();
            print $e->getMessage();
        }

截图
请问是问题3这个问题导致的吗 如何处理呢

1108 3 0
3个回答

864328615

你这个场景像是其他地方没有提交事务引起的,还有异常用Throwable,还有查看通过SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX查看事务的开始时间,然后去日志里查找同时间的sql语句 然后定位问题

  • 864328615 2022-06-19

    方法比较笨,反正当时我被这问题差点搞死,目前一切正常

  • 864328615 2022-06-19

    这个问题 本身这个sql所引起的,可能我理解有错,我系统只要出现这个问题,它会简介的致使系统大部分业务失效,经过分析很可能是sql线程的问题,这个sql线程挂掉后,之后所有在这个线程上的数据操作都会出现问题

  • 晚安。 2022-09-28

    你在哪个日志找到的当时时间执行的sql语句

aveadtyx

你这场景也不适合事务啊,就一个操作,可以1.开启事务2.for循环更新3.最后提交事务

  • 暂无评论
13280048428
  1. 排查同表慢查询
  2. 排查未提交的事务
  • 暂无评论
年代过于久远,无法发表回答
🔝