新聞中心
1.問(wèn)題的發(fā)現(xiàn)

2006年下半年,筆者在山東臨淄齊魯石化駐地參與一個(gè)項(xiàng)目的開(kāi)發(fā)。公司的另外一個(gè)項(xiàng)目《合同管理系統(tǒng)》正處于實(shí)施后期階段。該項(xiàng)目采用.Net開(kāi)發(fā)的B/S架構(gòu)的系統(tǒng),使用Oracle做后臺(tái)數(shù)據(jù)庫(kù)。先后兩次發(fā)現(xiàn),當(dāng)在線(xiàn)用戶(hù)較多的時(shí)候,客戶(hù)端感覺(jué)服務(wù)系統(tǒng)反應(yīng)很慢(多數(shù)用戶(hù)報(bào)告在登錄界面點(diǎn)擊登錄按鈕后,一直處于等待狀態(tài),系統(tǒng)不再反應(yīng))。查看服務(wù)器使用情況,CPU和硬盤(pán)訪問(wèn)并不繁忙,內(nèi)存占用也不是非常大;連接到數(shù)據(jù)庫(kù)沒(méi)有發(fā)現(xiàn)死鎖,但是會(huì)話(huà)非常多,大約在110個(gè)左右。開(kāi)始懷疑是數(shù)據(jù)庫(kù)的進(jìn)程(Processes)和會(huì)話(huà)(Sessions)設(shè)置的值較低(未安裝時(shí)候的默認(rèn)值,分別為170和150)。但是將這兩個(gè)值擴(kuò)大以后仍舊未解決問(wèn)題。在第二次發(fā)現(xiàn)該問(wèn)題的時(shí)候,我注意到雖然設(shè)置值較低,但是當(dāng)前并未達(dá)到這兩個(gè)值得上限;同時(shí)我也注意到該系統(tǒng)連接數(shù)據(jù)庫(kù)的會(huì)話(huà)正好是100個(gè),由此我聯(lián)想到數(shù)據(jù)庫(kù)連接池。
2.相關(guān)資料
使用連接字符串關(guān)鍵字控制連接池SqlConnection 對(duì)象的 ConnectionString 屬性支持連接字符串鍵/值對(duì),這些鍵/值對(duì)可用于調(diào)整連接池邏輯的行為。
ASP.NET連接數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)連接池默認(rèn)是開(kāi)啟的,并且池中允許的最大連接數(shù)默認(rèn)為100。由此基本可以確定,訪問(wèn)系統(tǒng)收到的阻礙時(shí)由于連接池已滿(mǎn)造成的。
該頁(yè)面中提到,如果連接池中的連接全部占用,系統(tǒng)會(huì)在連接池之外開(kāi)啟新的連接。這個(gè)說(shuō)法有疑問(wèn),該問(wèn)題在后面的會(huì)體積。
3.問(wèn)題的確認(rèn)
為了驗(yàn)證ASP.NET連接數(shù)據(jù)庫(kù)時(shí),連接池中的連接達(dá)到最大數(shù),新的連接就需要等待連接池中的連接釋放資源,我編寫(xiě)了一個(gè)測(cè)試頁(yè)面,在頁(yè)面裝載的時(shí)候,首先打開(kāi)10個(gè)連接,然后等待20秒鐘后再關(guān)閉這些連接。隨后使用測(cè)試機(jī)打開(kāi)兩個(gè)測(cè)試線(xiàn)程訪問(wèn)該測(cè)試頁(yè)面,然后在瀏覽器中打開(kāi)于這個(gè)測(cè)試頁(yè)面使用相同連接字串的另外一個(gè)頁(yè)面,發(fā)現(xiàn)后者的確需要等待測(cè)試線(xiàn)程訪問(wèn)的頁(yè)面處理完畢之后才可以連接到數(shù)據(jù)庫(kù)。
4.問(wèn)題的解決
找到問(wèn)題的癥結(jié)所在,我們系統(tǒng)的ASP.NET連接數(shù)據(jù)庫(kù)的字串,增加了Max Pool Size項(xiàng),根據(jù)需要將其設(shè)置為200。同時(shí)修改了Oracle服務(wù)器的的會(huì)話(huà)(Sessions)和進(jìn)程(Progresses)的值以滿(mǎn)足連接會(huì)話(huà)的需要。
5.疑問(wèn)
如前所述,資料中提及,如果連接池的連接全部占用,會(huì)創(chuàng)建新的連接。但是在采用默認(rèn)連接池大小和設(shè)置為20個(gè)最大連接數(shù)的時(shí)候,連接池的所有連接全部占用,新的連接請(qǐng)求并沒(méi)有開(kāi)啟新的連接會(huì)話(huà),而是等待連接池中的連接釋放。
但是連接池最大連接數(shù)設(shè)置為200個(gè)的時(shí)候,該系統(tǒng)的連接曾經(jīng)一度超過(guò)200個(gè)上限,達(dá)210多個(gè)。由此可以判斷超出的連接請(qǐng)求在連接池之外創(chuàng)建了新的連接會(huì)話(huà),符合了資料中的論述。對(duì)此疑問(wèn),煩請(qǐng)知情者闡述一下自己的觀點(diǎn)。
6.補(bǔ)充
在連接字串修改之后,原有的連接池會(huì)重新構(gòu)建,這一特性是否可以在何種情況下應(yīng)用?
當(dāng)前題目:概述ASP.NET連接數(shù)據(jù)庫(kù)
本文地址:http://m.fisionsoft.com.cn/article/dpdjihg.html


咨詢(xún)
建站咨詢(xún)
