前段时间写的购物系统,随着数据量的一直膨胀,上周日出现了问题,数据从SQL导出到EXCEL的时候总是出现有少量的重复数据,各个发行站导出的数据没有出现这个问题,就是汇总导出的数据出现了这个问题,而且一般出现在前500条数据中,数据量很大,发现重复的数据很难,刚开始以为导出EXCEL出现问题,结果用TXT导出来 还是有问题。
昨天下午下班的时候他们才说有问题,查找了一会,检查了半天没找出为什么会导出重复的,开始怀疑难道是多线程重复写入了。因为下班了,有事情就没弄。今天花了一上午在那查找问题所在。最终结论是
无论EXCEL还是TXT 导出的数据都是有问题,有少量重复的 。而我在数据库中利用查询语句查询出来的是没有问题的。
系统用了分页导出 就是一次导出100条数据 写入到EXCEL后在导下一次数据。 看了分页导出的存储过程也没问题啊,运行正常啊,要不以前早就出问题了。
还是没找出问题的根本所在。我还是怀疑 多线程在作祟,但是想想也不对啊,仔细检查了代码 公用变量并没有参与到多线程中去啊。
忽然灵光一闪 难道是存储过程每次运行同样的公式 返回的结果不同?
有去查看存储过程,发现了问题的根本。
分页存储过程 排序的问题
order by addtime desc
每次把相关数据插入到临时表 根据添加的时间进行排序,问题的根源,运行存储过程 有很大的几率得到不同的结果。
原来导入系统的订单也是批量导入,所以这个添加时间很多都是一样的。
这样每次排序可能结果不同了。
将之改成一个没有重复的列的排序,问题解决了。
总结: 以后如果有分页的话 如果要在分页中将之排序,切记要用 主键 或者没有重复值的类进行排序。
要找出系统BUG所在的关键。找错了大方向,只能越找越远。