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这个问题导致的吗 如何处理呢

91 2 0
2个回答

864328615

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

  • 864328615 6天前

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

  • 864328615 6天前

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

tangzhangming


检查一下图片上的库和表,里面能查到具体锁得哪一张表哪一条数据
再定位有关这张表的代码,你图片上的代码应该是没问题的,可能是其他位置代码造成的

  • 暂无评论
🔝