2009-09-23 52 views
7

在我正在開發的Java Web應用程序中,我們使用OracleConnectionPoolDataSource來實現數據庫連接池功能。每個getConnection調用都包含用戶的Oracle ID和密碼。因此,每個用戶在某種意義上最終都會有自己的數據庫連接池。設置和更新連接池(OracleConnectionPoolDataSource)以獲得最佳性能

目前我們使用大多數屬性的默認值。這包括

  • MinLimit設置爲0
  • MAXLIMIT組爲Integer.MAX_VALUE
  • MaxStatementsLimit設置爲0
  • InactivityTimeout設置爲0
  • TimeToLiveTimeout組到0
  • AbandonedConnectionTimeout設置爲0
  • PropertyCheckInterval組900
  • ConnectionWaitTimeout設置爲0

有關這些屬性的更多信息可以在Connection Cache Properties找到。

我們目前沒有任何明顯的數據庫連接問題,但認爲性能可能會更好。我的問題是,有人在調整這些值時有什麼好的建議或好的資源。

回答

6

Oracle應用服務器性能指南(適用於10g第3版)(10.1.3.1)提供有關how to optimize the connection pool parameters的確切信息。

這些信息對於幾乎所有場景都很有用,涉及使用連接池管理到Oracle數據庫的連接的應用程序,而不是正在使用的應用程序服務器。

例如,爲最小池大小設置一個值總是一個好習慣。就最大游泳池尺寸而言,該值不應該過高,因爲這可能會加載聽衆,特別是如果應用程序傾向於不關閉連接導致泄漏。

最好爲語句緩存設置一個合理的值,因爲這樣可以緩存預準備語句,從而提高性能。

超時也應選擇與環境考慮。例如,在大多數情況下,連接等待超時不應該爲零,因爲在足夠的時間間隔內無法在池中初始化物理連接時,可能會導致SQLException。不活動超時應足夠大,以便僅在足夠長的不活動時間後才能處理連接。如果值太低,則會導致物理連接的創建和刪除太頻繁。

編輯:性能指南中給出的指導適用於oracle.jdbc.pool.OracleDataSource類,這是Oracle 10g應用服務器用於託管數據源到Oracle數據庫的內容。它絕大部分肯定會繼承到OracleConnectionPoolDataSource。

+0

InactivityTimeout: 當InactivityTimeout過期時,基礎物理連接關閉。但是,如果已設置,則不允許緩存大小縮小到minLimit以下。 - 這是Oracle文檔,並說,如果所有的連接對象由超時關閉minLimit甚至不會縮水。這是否意味着它允許陳舊的物體住在游泳池內? http://docs.oracle.com/cd/B14117_01/java.101/b10979/conncache.htm#CDEBCBJC –

2

我的第一條建議:配置文件。

我的第二條建議:配置文件。

什麼是減慢你的應用程序,哪些方法調用導致你的應用程序性能受損?

你是否一直在等待創建新的連接?然後將您的MinLimit設置爲高於0,與'初始限制'相同,以便您有幾個可用的開始。如果您希望MaxLimit爲無窮大,請將其設置爲「0」,設置爲0表示無限制。

當您真的應該使用現有的非活動連接時,您是否正在創建新的連接?將您的InactivityTimeout設置爲除0之外的值。對於AbandonedConnectionTimeout也一樣。

注意,我會鼓搗的第一件事將是「初始limit'-

從甲骨文大約初始上限

這將設置連接 高速緩存的大小時,高速緩存最初是 創建或重新初始化。當此 屬性設置爲大於 的值時,該許多連接是 預先創建並準備使用。 此屬性通常用於減少在啓動 緩存時其「最佳」大小的「緩升」時間。

5

您是否考慮過使用新的Oracle UCP?從11g feature list(重點煤礦)引用:

爲JDBC

1.4.1.29通用連接池(UCP) 爲JDBC

通用連接池取代隱含連接高速緩存,並提供了以下功能:

  • 連接標籤,連接收穫,日誌記錄和統計
  • 性能和穩定增強
  • 改進的診斷和統計數據或指標

UCP的JDBC提供先進的連接池的功能,提高性能和連接問題更好的診斷能力。

+2

我喜歡這個答案。很抱歉,我們目前無法升級到新的驅動程序。 – Prof

+1

你應該考慮它。 IIRC Oracle DataSource的池功能已被棄用,以支持使用UCP。 – yawn

相關問題