c3p0配置 initialPoolSize 和minPoolSize 可以設為0嗎?設0有壞處嗎?
c3p0配置 initialPoolSize 和minPoolSize 可以設為0嗎?設0有壞處嗎?
2015-04-14 11:18
提問者采納
提問者采納
熱心網友
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
本文將對sdkservice生產環境上c3p0正在使用的各項配置進行詳細解釋,旨在為c3p0的配置提供參考標准。
sdkservice生成環境的配置如下:
#當連接池中的連接耗盡的時候c3p0一次同時獲取的連接數。Default: 3
c3p0.acquireIncrement=20
#初始化時獲取連接數,取值應在minPoolSize與maxPoolSize之間。Default: 3
c3p0.initialPoolSize=20
#連接池中保留的最小連接數,默認為:3
c3p0.minPoolSize=20
#連接池中保留的最大連接數。默認值: 15
c3p0.maxPoolSize=100
#最大空閑時間,多少秒內未使用則連接被丟棄。若為0則永不丟棄。默認值: 0
c3p0.maxIdleTime=60
#c3p0全局的PreparedStatements緩存的大小。如果maxStatements與maxStatementsPerConnection均為0,則緩存不生效,只要有一個不為0,則語句的緩存就能生效。如果默認值: 0
c3p0.maxStatements=0
#c3p0是異步操作的,緩慢的JDBC操作通過幫助進程完成。擴展這些操作可以有效的提升性能通過多線程實現多個操作同時被執行。Default: 3
c3p0.numHelperThreads=10
#定義在從數據庫獲取新連接失敗后重復嘗試的次數。默認值: 30 ;小於等於0表示無限次
c3p0.acquireRetryAttempts=5
#重新嘗試的時間間隔,默認為:1000毫秒
c3p0.acquireRetryDelay=300
#獲取一個connection需要的時間,單位毫秒
c3p0.checkoutTimeout=3000
#每隔多少秒檢查所有連接池中的空閑連接。Default: 0
c3p0. idleConnectionTestPeriod=60
#c3p0將建一張名為改配置項的空表,並使用其自帶的查詢語句進行測試。如果定義了這個參數那么屬性preferredTestQuery將#被忽略。你不能在這張Test表上進行任何操作,它將只供c3p0測試使用。默認值: null。由於運營平台的數據庫用戶沒有創建表的權限,故需要發sql創建表。
c3p0.automaticTestTable=sys_connectiontest
#如果設為true那么在取得連接的同時將校驗連接的有效性。Default: false
c3p0.testConnectionOnCheckin=true
#一個checkout連接的超時設置,一旦一個checkout連接超時,他將物理的關閉,而不是返回池中,主要是防止連接被長期使用不釋放,這個設置也是比較危險的
c3p0.unreturnedConnectionTimeout=15
下面分塊解釋各配置項值的由來。
基礎連接池配置:
maxPoolSize最大連接數在滿足應用需要的情況下,參考默認值15,越小越好。由於sdkservice多次出現連接數不夠的情況,該值也越改越大。現已改為100。
minPoolSize最小連接數需要小於等於最大連接數,參考默認值3,越小越好。同maxPoolSize的原因, 現已改為20。
initialPoolSize初始化連接數需要在最大和最小連接數之間,否則會被最小連接數的值替換,參考默認值3。 同maxPoolSize的原因, 現已改為20。
acquireIncrement連接耗盡時一次獲取的連接數,參考默認值3,由於sdkservice用到的mysql proxy在連接不夠進行擴容時,會出現獲取連接失敗的異常,所以將acquireIncrement的值設置較大,以減少mysql proxy的擴容異常。
maxIdleTime最大空閑時間,該時間內未使用,則丟棄。設置為60秒。