2017-04-08 190 views
6

我有一個託管在IIS 7上的Web應用程序,使用Oracle.DataAcess.dll for .NET執行到Oracle數據庫的連接和查詢。 在上週,我們突然遇到了這個組件拋出的無數錯誤,說:「連接請求超時。」。ODP.NET連接請求超時

經過幾個小時的調試,我發現錯誤確實表明連接請求超時,並且拋出錯誤碼爲:-1000(在oracle.DataAccess中,沒有引發ORA錯誤)。 在Oracle數據庫中,我看到該計算機只有一個連接,並且處於「非活動」狀態。 儘管只有一個連接,但在調試時它實際上在嘗試打開連接時超時。

我們不使用連接池策略,但正如我在調試模式下看到的那樣,有一個默認連接池(即使未指定值時)說最大連接數爲100,超時值爲15秒,並且生命週期爲0.這意味着該機器上的應用程序可以處理100個連接。

這樣說,我不明白爲什麼我會得到「連接請求超時」。錯誤,錯誤代碼= -1000,當我的應用程序可以創建多達100個連接(根據默認連接池的設置),但我的數據庫只顯示少量連接(發生在我的應用程序有一個連接和5個連接時發生 - 100)。

我會注意到,我可以專門回收我的應用程序後,要解決這個問題,但是這已經發生了不止一次,所以這是不是該解決方案...

是的東西我失蹤?

我的應用程序實際上是否使用了比我看到的更多的連接?

*更新: 我調試過程中發現有被困在Oracle.DataAccess和許多其他線程的「PopulatePool」方法是停留在「WaitForRegularConnection」的方法多線程...

All threads Populate pool stack trace

+0

這是間歇性發生的還是所有的時間? – Gilles

+0

它間歇性地發生......每隔幾個小時,我的服務器上就會發生這種情況。 –

+0

請啓用調試跟蹤並共享信息。 TraceLevel 2(連接池統計)就足夠了。 http://docs.oracle.com/cd/B28359_01/win.111/b28375/featDebug.htm –

回答

0

講究的Oracle調用,執行被送到哪些查詢,連接超時不取決於連接池最大計數的,永久您的要求提供一個連接。記錄您的請求,然後嘗試模擬它們,檢查DB中的執行持續時間。

0

您的體驗可能是您的服務器負載因爲某種原因變得太大,導致它花費太多時間來處理新的查詢。

  1. 看看你的服務器的負載日誌如果可以,就看什麼可能是你經歷的超時時間所發生的情況就可以了。如果您只將該數據庫與服務器託管在一起(更好的選擇),請參閱第二個選項

  2. 您的應用程序也可能使用緩慢過度擁擠SGA的軟件包,並且由於會話未取消,會佔用太多資源。所以一個解決方案就是跟蹤這個「長期持續」的會話,並看看它想要做什麼。