2012-08-13 111 views
0

我們的.NET Web應用程序使用ODP.NET進行連接,並且其用於連接到數據庫的Oracle用戶是「webuserOracle」。該Web應用程序始終關閉連接並處理連接。由.NET Web應用程序生成的Oracle會話和進程

但是,在我們的Oracle 10g數據庫中,我們看到Oracle用戶「webuserOracle」的會話和流程值始終很高,因爲它們沒有關閉或死亡。

我們已決定在「webuserOracle」的Oracle配置文件上設置,以限制連接時間長達5分鐘。

CREATE PROFILE profile_webuserOracle LIMIT CONNECT_TIME 5; 

ALTER USER webuserOracle PROFILE profile_webuserOracle; 

問:

對於Web應用程序,限制連接到5分鐘,這意味着用戶可以互動,比如說,與Web應用程序2小時。 5分鐘的限制僅適用於觸發的事件(如單擊按鈕)以連接到數據庫。 5分鐘,一切Con.Open和Con.Dispose之間發生了:

Dim con As OracleConnection = oraConexion() 
con.Open() 
''' There'll be a limit of 5 minutes to run the code here 
con.Close() 
con.Dispose() 

回答

1

在配置文件中設置一個CONNECT_TIME爲Web應用程序很可能是一個非常糟糕的主意。

首先,一般來說,三層應用程序將利用中間層的連接池。這意味着中間層服務器會打開一個連接到數據庫的連接池,並保持長時間的打開狀態,並根據需要分配給Web會話。這意味着單擊網站的單個Web用戶可能會在每次點擊時獲得不同的數據庫會話,並且單個數據庫會話將被大量Web用戶使用。

如果您爲您的連接池連接的CONNECT_TIME

  • 中間層很可能不斷出現錯誤,它從連接池獲得的特定連接已經超過其允許的連接時間。您可以通過讓中間層對從池中獲取的每個連接執行一個虛擬查詢(即select 1 from dual)以確認交互開始之前5分鐘未過去,但無法保證超時在頁面上運行第一個查詢時將不會被觸及。
  • 中間層將不斷打開到數據庫的新物理連接(一個相當昂貴的過程),以替換已關閉的連接,因爲它們已打開5分鐘。這些連接風暴可能會給數據庫帶來很大負擔。這也會爲應用程序帶來性能問題,因爲用戶一直在等待新的物理連接被打開,而不能重用池中的連接。
  • 如果進行此更改,會話和進程的數量可能會更高。中間層將保持其需要服務用戶的許多真實物理連接以及多個過期連接,這些連接只是爲了通知下一個呼叫者它們已到期。

你試圖解決什麼是真正的問題?中間層維護一個不關閉的數據庫連接池是非常正常的。這是完全正常和健康的。如果您想減少任何時候打開的連接數,則可以調整中間層服務器上的連接池設置。

相關問題