线上问题得解决

问题: 最近碰到一个比较棘手但是比较低级的问题,一直没有找到原因,苦找了两天才发现问题。场景就是订单做了某一个操作之后(比如拣货完成)然后到下一步(下道口)。

但是线上几万笔订单 ,只有偶尔几笔发现,到了下道口操作,但是拣货明细数据丢失。百思不得其解

背景:A订单,拣货操作后,去下道口(改订单状态以及明细),下道口完成生成配货任务量。

现在定义的pda操作是8秒钟。

触发流程。点击拣货完成。然后跳到下道口页面 ,拣货完成接口执行了十几秒。就会导致前端报超时(其实后端处理中,此时订单状态已变成下道口中,但是拣货数量没有改变成正确的还是0,这两个步骤刚好卡在8秒前后),然后进明细还会有一个操作就是吧拣货为0的货号自动下道口

超时之后pda操作人员会立即再点击下道口操作。 此时订单状态已经变成下道口了,但是明细表没有改变状态以及下道口数量。所以第二次点击会报订单状态待下道口但是明细都已经下道口完成,就会一直报找到不可以下道口的货号

最终原因就是数据库执行时间过长(那段时间数据库有问题  ,然后隔离级别又是默认的 可重复读)然后后面的下道口页面也没有加 读已提交注解。所以偶尔就有问题

这里说一下  mysql的默认隔离级别  “可重复读” 和 “读未提交” 和’‘读已提交’‘有什么区别

读未提交:在此隔离级别下,其他事务修改了数据 但是还没有提交, 该事务也能读取到

读提交:在此隔离级别下,一个事务只能看到其他事务已提交的更改。这意味着,同一个事务中的多次查询可能会看到不同的数据,因为其他事务在此期间可能已经提交了更改。

可重复读:在此隔离级别下,一个事务启动时看到的数据是一致的。即使其他事务提交了更改,这些更改对当前事务也不可见,确保事务内的多次查询结果一致。(默认的)

你可能感兴趣的:(mysql)