提高查詢數據的性能
我負責的那個項目采用了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 閱讀(500)
評論(0) 編輯 收藏 所屬分類:
SqlServer