提高查詢數(shù)據(jù)的性能
我負(fù)責(zé)的那個項(xiàng)目采用了webwork + spring + hibernate 的架構(gòu),用到了3個數(shù)據(jù)庫.現(xiàn)在已經(jīng)正是使用了,先慶祝一下

.用戶反映速度很慢,說有時一個查詢要等10秒左右,妨礙了他們的工作.他們這么一說,我就 開始找原因了.我以為是用了hibernate引起的,所以請教了我的朋友--waterYe. 問了他一些關(guān)于怎樣優(yōu)化hibernate.比如說用lazy load .可hibernate 3.0默認(rèn)方式是lazy load.而且表間的關(guān)系是手工控制的.(好像對字段也能lazy load,不過我還沒有實(shí)踐過

).然后我把配置文件發(fā)給他讓他給我看看.waterYe很快就發(fā)現(xiàn)了問題,他發(fā)現(xiàn)我沒有使用數(shù)據(jù)庫連接池(這個我一直到用了,怎么可能沒有呢?).原來我在appllicationContext-hibernate.xml文件中用了"org.springframework.jdbc.datasource.DriverManagerDataSource"這個并沒有提供連接池的功能.這個是我沒有注意到的.我是用equinox新建的項(xiàng)目,我以為它用了連接池.以后學(xué)習(xí)過程中真要把它們吃透,一定要知其所以然.最后我改用了BasicDataSource.請參考
http://www.is.pku.edu.cn/blog/?date=2004-12-29&id=2&m=display .Water Yer 建議我用WEB服務(wù)的JNDI的方式會好些. 他還發(fā)現(xiàn)了一個問題就是我把很多ArrayList等數(shù)據(jù)放在了session中(其實(shí)我知道這樣做肯定不好,可我不知到怎樣把Action中的ArrayList的數(shù)據(jù)傳的JSP頁面中,

所以就用了session) ,朋友建議我改成放到request中(不知有沒有更好的方法

).可修改完這些查詢的性能沒有明顯的提高.

這個系統(tǒng)是一個比較重要的系統(tǒng),對性能要求比較高.所以大家都很重視.所以我們的老大,也在為我想一些辦法.今天一上班,就把我叫過去,一起討論數(shù)據(jù)庫優(yōu)化.其實(shí)我也有想到過數(shù)據(jù)庫方面肯定也是影響性能之一,還有就是網(wǎng)絡(luò)阻塞.由于上星期五我就請假回家,時間非常緊張所以也沒有忙過來.
老大說可能把存儲過程改成視圖可能會好點(diǎn).然后我倆就把存儲過程改成了視圖來比較到底那個運(yùn)行的速度快.可我們發(fā)現(xiàn)改完的效果不是很明顯(差不多).由于連接到3個數(shù)據(jù)庫,而且他們的數(shù)據(jù)也很多,請求處理的業(yè)務(wù)邏輯也很復(fù)雜,用到了5個存儲過程.老大又提出,是不是創(chuàng)建索引可能會又效呢?我們又開始對所有表創(chuàng)建索引(請參考
http://www.vckbase.com/document/viewdoc/?id=1307).果真查詢的速度很快了.客戶也滿意了,當(dāng)然我也非常的高興.又解決了一個問題.
所以遇到問題一定要從多方面來考慮,仔細(xì)想一想,多測試,多找資料,相信問題一定有解決辦法.
posted on 2005-12-07 15:36
Harryson 閱讀(500)
評論(0) 編輯 收藏 所屬分類:
SqlServer