关于数据库操作问题

hcb_102588 2017-09-18 02:46:09
本人是软件开发的新人,最近遇到这样一个问题:现在有一个方法,每隔五分钟执行一次该方法的循环,每次循环执行400次左右,方法每次执行都会调用sql执行oracle里面的avg()方法和stddev()方法计算一次平均值和方差(400次执行每次用于计算的记录都不一样),循环完毕之后所有的记录都会使用到。经测试,现在有50w条记录每算一次平均值和方差都在一秒以内,问题是数据里面的数据会不断增多,频繁的调用avg方法stddev方法会不会引起数据库崩溃?数据量继续增大会不会导致效率大幅下降?该如何做出优化?
...全文
584 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
碧水幽幽泉 2017-09-22
  • 打赏
  • 举报
回复
每隔五分钟执行一次该方法的循环,每次循环执行400次左右。 你这相当于双重循环,数据量继续增大性能肯定会下降,很可能在5分钟内都执行不了400次内层循环,最后会进行死循环,导致数据库死锁,直至数据库崩溃。 需要改下系统设计: 1.将双重循环改成单次循环,比如:xx秒内执行循环xxx次调用avg()方法和stddev()。 2.每次循环执行400次左右,将这个改成存储过程,创建一个定时器任务定时调用。 。。。 还有其他方法。
hcb_102588 2017-09-20
  • 打赏
  • 举报
回复
引用 2 楼 wmxcn2000 的回复:
楼主尝试一下,把400次循环,写成一个大的汇总语句,看看什么效果。
你是指,把现在每次循环调用400次sql语句的形式进行整改吗? 确实是一个很好的解决方案,但是大概实现不了,因为每次循环出来的结果都要关联接下来的业务,每次循环都是一个最小的业务单元。
hcb_102588 2017-09-20
  • 打赏
  • 举报
回复
引用 1 楼 minsic78 的回复:
随着数据增多,性能会下降,如果需求如此,数据库层面很难优化,如果实际参与计算的数据量其实是整表的一部分,比如某段时间,那么可以考虑按照查询的时间字段分区,从而使得查询统计的性能可以随着时间推移、表的增大而保持稳定。 另外,如果这样的查询统计需要提供一定的并发量,那么性能会下降得更快,一个并发可能1秒,10个并发就难说了,具体在某个可以接受的响应时间内,能达到多少并发,可能需要做个压力测试才能测得出来了。
非常感谢,很有参考意义,看来我要学习的东西还有很多啊
卖水果的net 2017-09-18
  • 打赏
  • 举报
回复
楼主尝试一下,把400次循环,写成一个大的汇总语句,看看什么效果。
minsic78 2017-09-18
  • 打赏
  • 举报
回复
随着数据增多,性能会下降,如果需求如此,数据库层面很难优化,如果实际参与计算的数据量其实是整表的一部分,比如某段时间,那么可以考虑按照查询的时间字段分区,从而使得查询统计的性能可以随着时间推移、表的增大而保持稳定。 另外,如果这样的查询统计需要提供一定的并发量,那么性能会下降得更快,一个并发可能1秒,10个并发就难说了,具体在某个可以接受的响应时间内,能达到多少并发,可能需要做个压力测试才能测得出来了。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧