最近解决了一个困扰我好久的疑难问题,真的太开心了,我要把这份喜悦与你们共享一下
故事要从我“家”有个老古董大屏开始讲起,之前性能还不错,领导也贼喜欢,看着舒服啊,但是随着时间的推移,数据库数据量越来越多,性能也就变差了,大屏本身就需要对多个指标同时进行分析,SQL 是又多又复杂,性能就一直是个大麻烦
之前就改改 SQL,优化优化 SQL,但是改了这好几年了,恕我直言,改不动了,要改吐了,给你们看一段 SQL,诶,不说了,懂得都懂
关于如何优化性能,我做的尝试可不是一点点,除了改 SQL,我还试了很多
最开始试用的是共享数据集,也就是“老缓存”,在展现速度上比之前大有提升,但是无法控制缓存的数据更新时间,时常会有数据变化了但是缓存还在的情况发生,导致大屏数据对不上,总被业务人员追着问
后来又试了合并相同 SQL,这个方案主要想解决相同 SQL 重复加载的问题,但是这个方案有场景限制,而我就是被限制住的那一种(具体支持哪些大家需要去自己了解下,当时没有深入去了解)
并行取数也是别人推荐的一个方案,但是实际试下来只能优化一部分取数性能,而且我的 CPU 在那一段时间常常爆满,后来了解到是因为有取数先后关系和线程限制之类的影响,就也放弃了
难道我的人生只能如此了吗
试用 抽数缓存 完全抱着死马当活马医的状态,之前的好多方案多多少少都有些受场景限制,但是抽数缓存没有门槛,没有限制,所有的模板都能用,不管你是 cpt 还是 frm,不管你是 PC 端还是移动端,而且不用改模板改 SQL,寻思这试用成本很低了就果断装了插件
大屏是定时刷新的,但是我们的数据库数据是日更新几次的那种,就配置起来比较麻烦,我一度以为这个方案又要泡汤的时候又意外得知他们这个定时更新支持 cron 表达式,那可就太好办了,就那种神器在手,天下我有,太方便了,随心所欲的定时
根据实际业务需要,按时缓存最新的数据,大屏刷新的时间直接读取缓存好的 SQL 结果就可以了,展示结果对比图有生产数据我就不放了,我当场落泪了,你们就自行脑补吧
意外之喜,这一波操作下来不光大屏性能变好了,数据库压力也变小了,总次数应该是上升了,但是会削峰填谷。因为之前是实时的查询,大屏组件又多,高并发下数据库会承接较大的压力,通过缓存预加载的方式,可以有效缓解数据库高峰时期的压力。
随后我又抱着试一试的心态在系统里选了一些模板开启缓存,这几天我统计分析前一段时间的使用情况的时候整个人都被震惊到了
开启抽数缓存的所有模板的平均预览耗时,整个从之前的每个模板平均 8 秒多变成了现在的 3 秒,真的效果太明显了!至于这个走势有些许的波动,不过是因为我每一次新加入的模板的第一次预览时间会比较耗时,会拉高整体的平均水平,等运行一段时间后会重新降下来啦
现在我们的大屏模板刷新都是秒出,还有同事悄悄问我说,帆软最近怎么了,怎么快了这么多!哈哈哈,一天一个生活小妙招,这个解救我于“苦难”的功能我要推荐给你们!
https://bbs.fanruan.com/thread-133861-1-1.html
抽数缓存插件-https://help.fanruan.com/finereport/doc-view-3638.html
对啦,他们最近还在发放福利,试用领50F币,大家快冲!https://bbs.fanruan.com/task-234.html
截图为证,我是最早一批得到奖励的,哈哈哈哈
编辑于 2020-12-15 17:33
|