生产环境惨痛教训

一、数据

         截止19年11月29日。

         我个人负责模块客户数据:40902条。

         核心业务数据共收到:69321条。

         成绩排名:计算出来合法数据共:35325条。程序执行时间:约40分钟。

         中位数情况:计算出来合法数据:2288条。程序执行时间:约1分钟。基于成绩排名结果表。

         学分综合情况:计算出来合法数据:3168条。程序执行时间:约1小时。共处理4学年,跨度7个年级。时间最大跨度7学年,最大10个年级。按照当前用户量与核心业务数据数据量,每一个学年处理约25分钟。最大程序执行时间预计应不超过2小时。

二、教训

         数据库字段设计为not null,结果实施同事还是塞了空字符串。因此,一定要在运行程序之前,帮助实施人员检查数据。

         不能完全依赖数据库,加了索引也没有用。实测索引可能减少50%的查询时间,但是仍然有超过3万条数据需要查询。耗时3到5秒,性能很差,现在最懊恼的就是这一点。没有通过定时任务处理,直接查询了原始数据表。 

          当数据量上十万、百万级别,一定要提前处理。坚决不直接查询原始表,一定要创建业务类的结果表。这个错误在设计阶段我就犯错了。

          线上环境非常担心OOM,程序在执行的时候就令我焦虑不安。如果不加以控制,内存撑爆,背大锅。测试人员无法测试OOM,毕竟谁都造不出那么多数据。一定要拆解维度、增加循环!一定要!

三、后记

         好马不会在同一个地方摔倒两次,同一个错误不能犯两次。

         还有就是,准备挨批。

         在老大的指导下,把一个运行一小时的程序缩短为不超过5分钟。。。。

         其他大佬给了一个监控JVM的工具。内存顶峰为700M,应该在线上OOM是不存在的。

     

         

         

发布了315 篇原创文章 · 获赞 243 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/yanluandai1985/article/details/103297045
今日推荐