• 【线上问题处理】因代码造成mysql表死锁的问题,如何杀掉对应的进程


    同事 代码出了问题

     Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
    try{
        //创建订单
        agOrderRelationSwjList.forEach(e->{
            //如果有记录 则删除原来的
            //LambdaQueryWrapper<AgSwjMfiveOrder> queryWrapper = new LambdaQueryWrapper();
            //queryWrapper.eq( AgSwjMfiveOrder::getMfiveOrder, order.getOrderCode() ).eq( AgSwjMfiveOrder::getSchemeId,e.getSchemeCode() );
            //agSwjMfiveOrderService.remove(  queryWrapper);
            operationFactory.getOperationService(SwjConstants.SWJ_L).createOrder(order.getOrderCode(),e.getSchemeCode());
        });
    
    } catch (Exception e){
        TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);
        throw new ServiceException("异常!");
    }
    

    上面故障代码里面 执行了删除,为什么导致锁表呢?事务没有提交?事务是自动提交的呀。。。 回头查查代码问题

    先处理MYSQL

    select * from information_schema.innodb_trx
    里面的trx 是没有办法 kill掉的
    可以
    show engine innodb status
    拿到数据 在里面搜对应的trx_id
    会找到 可以在 show processlist 中的对应的线程ID,这样就可以 kill

    本次故障的事务线程ID 就是194788882,可以看到 信息还是非常全面的

  • 相关阅读:
    C++中的explicitkeyword
    SQLite数据库查看工具(免费)
    C Tricks(十九)—— 求以任意数为底的对数
    分治法(divide & conquer)与动态规划(dynamic programming)应用举例
    分治法(divide & conquer)与动态规划(dynamic programming)应用举例
    C++组合数(combination)的实现
    C++组合数(combination)的实现
    算法求解方法与思路的总结
    算法求解方法与思路的总结
    使用 STL 辅助解决算法问题
  • 原文地址:https://www.cnblogs.com/cfas/p/16447318.html
Copyright © 2020-2023  润新知