我們有太多的Oracle進程的一個問題被創建(2,000)當連接被限制爲1100(使用C3P0)關係處理
兩個問題:
Oracle進程和JDBC連接之間的關係是什麼?是否爲每個會話創建一個Oracle流程?是否爲每個JDBC 陳述創建?根本沒有關係?
你有沒有遇到過這種情況,在哪裏創建比JDBC連接更多的進程?
如有任何意見,我們將不勝感激。
我們有太多的Oracle進程的一個問題被創建(2,000)當連接被限制爲1100(使用C3P0)關係處理
兩個問題:
Oracle進程和JDBC連接之間的關係是什麼?是否爲每個會話創建一個Oracle流程?是否爲每個JDBC 陳述創建?根本沒有關係?
你有沒有遇到過這種情況,在哪裏創建比JDBC連接更多的進程?
如有任何意見,我們將不勝感激。
有一個本質每個連接的SSION。這聽起來像你有一個連接泄漏,某處你打開一個新的連接,並沒有正確關閉。一種可能性是您在try
區塊內打開,使用和關閉連接,並且正在處理catch
中的異常,或者由於某種原因而提前返回。如果是這樣,您需要確保連接關閉在finally
中完成,否則可能不會發生,從而導致連接(因此會話)掛起。在同一範圍內打開兩個連接而沒有明確的關閉也可以這樣做。
我不熟悉C3PO,所以不知道如何處理連接,或在何處以及如何實施1100限制;如果它(或者你)有一個連接池,並且你所指的1100是最大池大小,那麼這聽起來不像這個問題,因爲你在會話上限之前達到了池蓋。
您可以查看v$session
以確認所有會話都來自JDBC,並且沒有其他連接。
也許你想檢查你的服務器是以專用還是共享模式運行(如果你想減少活動進程的數量,你可能想把它切換到共享模式)。
您可以檢查做有關處理架構
http://docs.oracle.com/cd/B19306_01/server.102/b14220/process.htm
共享/專用服務器模式
select server from v$session
更多信息
http://docs.oracle.com/cd/B10501_01/server.920/a96521/manproc.htm