提高查询数据的性能
我负责的那个项目采用了webwork + spring + hibernate 的架构,用到了3个数据库.现在已经正是使用了,先庆祝一下
.用户反映速度很慢,说有时一个查询要等10秒左右,妨碍了他们的工作.他们这么一说,我就 开始找原因了.我以为是用了hibernate引起的,所以请教了我的朋友--waterYe. 问了他一些关于怎样优化hibernate.比如说用lazy load .可hibernate 3.0默认方式是lazy load.而且表间的关系是手工控制的.(好像对字段也能lazy load,不过我还没有实践过
).然后我把配置文件发给他让他给我看看.waterYe很快就发现了问题,他发现我没有使用数据库连接池(这个我一直到用了,怎么可能没有呢?).原来我在appllicationContext-hibernate.xml文件中用了"org.springframework.jdbc.datasource.DriverManagerDataSource"这个并没有提供连接池的功能.这个是我没有注意到的.我是用equinox新建的项目,我以为它用了连接池.以后学习过程中真要把它们吃透,一定要知其所以然.最后我改用了BasicDataSource.请参考
http://www.is.pku.edu.cn/blog/?date=2004-12-29&id=2&m=display .Water Yer 建议我用WEB服务的JNDI的方式会好些. 他还发现了一个问题就是我把很多ArrayList等数据放在了session中(其实我知道这样做肯定不好,可我不知到怎样把Action中的ArrayList的数据传的JSP页面中,
所以就用了session) ,朋友建议我改成放到request中(不知有没有更好的方法
).可修改完这些查询的性能没有明显的提高.
这个系统是一个比较重要的系统,对性能要求比较高.所以大家都很重视.所以我们的老大,也在为我想一些办法.今天一上班,就把我叫过去,一起讨论数据库优化.其实我也有想到过数据库方面肯定也是影响性能之一,还有就是网络阻塞.由于上星期五我就请假回家,时间非常紧张所以也没有忙过来.
老大说可能把存储过程改成视图可能会好点.然后我俩就把存储过程改成了视图来比较到底那个运行的速度快.可我们发现改完的效果不是很明显(差不多).由于连接到3个数据库,而且他们的数据也很多,请求处理的业务逻辑也很复杂,用到了5个存储过程.老大又提出,是不是创建索引可能会又效呢?我们又开始对所有表创建索引(请参考
http://www.vckbase.com/document/viewdoc/?id=1307).果真查询的速度很快了.客户也满意了,当然我也非常的高兴.又解决了一个问题.
所以遇到问题一定要从多方面来考虑,仔细想一想,多测试,多找资料,相信问题一定有解决办法.
posted on 2005-12-07 15:36
Harryson 阅读(493)
评论(0) 编辑 收藏 所属分类:
SqlServer