MySQL分页查询出现重复数据
情景(situation):
今天在生产环境,业务同事导出文件时遇到了出现重复数据的问题。因为之前这个功能是我和我带的外包同事一起做的,所以很熟悉这块代码。经过线上操作核对,和代码检测,发现线上查询确实出现了重复数据,而导出文件出现重复数据是因为导出功能后面使用的接口是我提供的分页接口。通过代码分析,基本确认后台应用端代码应该是没有问题的,那么问题就出现在我提供接口的微服务模块。
任务(task):
接下来的任务就是找出问题所在。然后就开始分析我微服务模块的代码,经过仔细检查,发现代码逻辑层面是没有问题的,因为前几页的分页都是成功的,但是问题出现在后续几页的数据中,而且在这几页之后的数据又是正常的。那也就是中间那些数据出现了重复。
通过运维同事查看数据库,发现数据库中对应的数据并没有出现重复,排除了数据插入重复的可能,也就是数据写入判重的代码没有问题。
此时,通过观察重复数据,发现一个特征,也就是重复数据的配置时间(config_tm)字段值都相同,而这个字段是当时需要说明上要求,数据按照修改时间倒叙排列,所以当时取了这个字段做排序。通过网上搜索MySQL分页数据重复,找到了相关问题,也有人遇到了这个问题。到这里我们大概找到了问题的解决方案,但是秉持严谨的工作态度,接下来准备在测试环境重现这个问题。
行动(action):
经过在测试环境构造有相同配置时间的测试数据,我们顺利的重现了这个问题。解决问题的方式也很简单,就是在