问题3----由主从延迟引起的不一致


关键信息 (1)变更数据后,再次查询找不到更改数据 (2)数据库架构存在主从模式

问题描述

自动化用例发现相同的用例,有时候能够正常运行,有时候不能正常运行。不能正常运行的原因是查询不到前面用例插入的数
据,导致下一步无法进行。

问题排查

(1)观察日志

发现更改数据的相关日志全部正常(显示的确插入了),查询的相关日志也全部正常(显示确实是SQL查询结果为空)

结论–不是代码的bug,猜想可能是插入与查询中间存在数据变更。

(2)查看数据库记录

猜想是插入与查询中间存在数据变更(比如一个新的请求把插入记录删除或者更新了几个字段导致不符合查询条件了),观察数据库记录发现
插入记录在插入后并未进行任何更改。

注意:这里可以发现,大家在进行表的设计时,可以预留两个字段creatTime以及updateTime,重要的数据表甚至可以设计一个history表
记录表的相关变更。这样会为后续的数据排查带来很大便利

结论—插入与查询中间不存在数据变更,应该是其他原因。

(3)定位问题

这个时候其实有些陷入僵局了,后面在同事提醒公司有些接口采用joinjdbc进行联表查询,如果先插入,再用joinjdbc对从库进行查询,
可能会存在主从延迟问题。

排查接口逻辑,发现在插入数据是直接插入到主库,后面查询是采用从库进行查询。如果插入数据与查询数据间隔时间过短,由于主从延迟的存在
,会导致查询不到插入的数据。

结论----查询从库时,主库插入的数据还未同步到从库,所以返回结果为空。

解决方法

让自动化用例在先更改后查询的请求之间,加上一个时间等待(视主从延迟的时间而定)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值