【线上问题处理】因代码造成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,可以看到 信息还是非常全面的

posted @ 2022-07-05 17:30  方东信  阅读(352)  评论(0编辑  收藏  举报