lgcpeter 2009-05-07 13:18
浏览 325
已采纳

用HQL语句导出excel(1500行*100列)速度逐渐变慢

最近开发hr系统,需要用HQL语句导出excel(1500行*100列),一开始5-6行/s,执行至500行时3行/s,到1000行1行/1s。
一开始认为是jxl写入速度越来越慢,去掉写入excel,依旧是慢。
然后怀疑到hibernate的查询上,每一行都涉及到6,7条hql语句。
但不明白为什么查询会减速执行,而不是匀速?
[b]问题补充:[/b]
可以排除数据库执行sql语句的因素。
hibernate会不会出现类似问题。
[b]问题补充:[/b]
数据库为Mysql,c3p0连接池,问题应该不会出在数据库连接上
[b]问题补充:[/b]
耗时在Hibernate执行查询上
[quote]去掉写入excel,依旧是慢[/quote]
[b]问题补充:[/b]
部分改为sql语句执行查询,速度有所提升,但全部改为sql有工作量
[b]问题补充:[/b]
先在开发环境(笔记本:xp/单核1.86GHZ/1G内存),用时5分钟
然后生产环境(服务器:2003server/4核2.33GHZ/4G内存),用时10多分钟
同样的数据库,同样的tomcat容器
速度整好差了1倍。想象中高配环境比低配环境要快才是,可结果诡异。
执行别的操作服务器还是比笔记本快好多,不知道为什么一干大活就掉链子呢?甚是诡异!

[b]问题补充:[/b]
服务器上的tomcat内存设置参数调整了一下,速度正常了,大概5分钟左右,说明跟jvm控制内存关系很大。
另改为了分页式的查询,每200个查询一次,速度有所提升,但不明显,服务器上可以提升半分钟。

[b]问题补充:[/b]
[quote]我们当初有一个功能,一次载入1.5W个对象,时间是2分钟左右,你10多分钟很有问题。[/quote]
不知您的导出有多少行多少列?每一行是否又涉及多个子查询?

  • 写回答

14条回答 默认 最新

  • eyeqq 2009-05-11 08:51
    关注

    [quote]不知您的导出有多少行多少列?每一行是否又涉及多个子查询?[/quote]
    很早之前的事了,不过我记得最基本的字段在20个以上。没有子查询,子表lazy。
    这个情况当初很糟糕,所以我们后面都改用分页的方式去获取数据。弹出对话框,说用户选择数据,而不是下拉框....-_-!
    这个方法肯定不适合你啦。

    [quote]服务器上的tomcat内存设置参数调整了一下,速度正常了,大概5分钟左右,说明跟jvm控制内存关系很大。[/quote]
    你这样的处理方式是治标难治本哪!你的数据量就保持在这个数量级数上面没有再提升的空间?如果数据量加大了那你又要跑到服务器那边去加内存吗。。。
    不知道你测试的“分页式的查询”是怎样的查询方式,我觉得这个处理方式是比较安全的,数据的增长对程序的稳定性方式会比较有保障。

    额......我突然想到一个问题。你这么多数据导出来,你那Excel得几M啊?机器都这么吃不消,那多来几个人导数据那还得了。
    还是有的数据是一些数据是附带的冗余数据?如果是的话那建议你去除掉这些数据。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(13条)

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?