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

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

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

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

).可修改完這些查詢(xún)的性能沒(méi)有明顯的提高.

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