druid是阿里巴巴開源平台上乙個資料庫連線池實現,它結合了c3p0、dbcp、proxool等db池的優點,同時加入了日誌監控,可以很好的監控db池連線和sql的執**況,可以說是針對監控而生的db連線池。
(1)datasource中url重要配置引數(spring配置字首:spring.datasource.url)
配置預設值
說明推薦說明
servertimezone
時區asia/shanghai
useunicode
true
characterencoding
1、存資料
資料庫在存放專案資料的時候會先用utf-8格式將資料解碼成位元組碼,然後再將解碼後的位元組碼重新使用gbk編碼,並存放到資料庫中。
2、取資料
在資料庫中取資料的時候,資料庫會先將資料庫中的資料按gbk格式解碼成位元組碼,然後再將解碼後的位元組碼重新按utf-8格式編碼資料,最後再將資料返回給客戶端
utf8
usessl
true
mysql在高版本需要指明是否進行ssl連線
false
(2)druid重要配置引數(spring配置字首:spring.datasource.druid)
配置預設值
描述推薦說明
initial-size
0初始化時建立物理連線的個數。初始化發生在顯示呼叫init方法,或者第一次getconnection時
連線數=(核心數 * 2) + 有效磁碟數)
min-idle
最小連線池數量
與initialsize一致
max-idle
8最大連線池數量
max-wait
獲取連線時最大等待時間,單位毫秒。配置了maxwait之後,預設啟用公平鎖,併發效率會有所下降,如果需要可以通過配置useunfairlock屬性為true使用非公平鎖
use-unfair-lock
false
如果設定了maxwait,則啟用公平鎖
time-between-eviction-runs-millis
60000
在空閒連線**器執行緒執行期間休眠時間,它決定執行緒多久驗證空閒連線或丟棄連線的頻率
原始碼上看,是通過validation-query配置的語句語句檢測連線的有效性,如果連線失敗了則丟棄
min-evictableidle-time-millis
1800000
連線在池中保持空閒而不被**的最小時間
validation-query
用來檢測連線是否有效的sql,要求是乙個查詢語句。如果validationquery為null,testonborrow、testonreturn、testwhileidle都不會其作用false
如果檢測到已知驅動後,會使用mysqlvalidconnectionchecker類進行有效檢測,走的是ping策略,而不是該配置,哪怕沒有配置也會走預設的 「select 1」,前提是使用mysqlvalidconnectionchecker,不然是直接返回true的
validation-query-timeout
-1檢測連線超時時間
雖然這裡預設是-1,但是實際**會設定成1s的時間
test-on-borrow
false
申請連線時執行validationquery檢測連線是否有效,做了這個配置會降低效能
test-while-idle
true
建議配置為true,不影響效能,並且保證安全性。申請連線的時候檢測,如果空閒時間大於timebetweenevictionrunsmillis,執行validationquery檢測連線是否有效
test-on-return
false
歸還連線時執行validationquery檢測連線是否有效,做了這個配置會降低效能
pool-prepared-statements
false
是否快取preparedstatement,也就是pscache。pscache對支援游標的資料庫效能提公升巨大,比如說oracle。在mysql下建議關閉
max-open-prepared-statements
-1要啟用pscache,必須配置大於0,當大於0時,poolpreparedstatements自動觸發修改為true。在druid中,不會存在oracle下pscache占用記憶體過多的問題,可以把這個數值配置大一些,比如說100
filter-class-names
flter.stat.slow-sql-millis
spring:
datasource:
url: jdbc:mysql:
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.driver
以資料庫例項是4核8g為例(待考量):
spring:
datasource:
druid:
initial-size: 10
min-idle: 10
max-active: 25
max-wait: 60000
use-unfair-lock: true
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
設定後,效能會翻倍(見參考資料有讚優化),但是這樣做有沒有其他問題?
(1) com.alibaba.druid.pool.druiddatasource#getconnectiondirect
public druidpooledconnection getconnectiondirect(long maxwaitmillis) throws sqlexception else
if (testwhileidle)
if (lastkeeptimemillis > lastactivetimemillis)
long idlemillis = currenttimemillis - lastactivetimemillis;
long timebetweenevictionrunsmillis = this.timebetweenevictionrunsmillis;
if (timebetweenevictionrunsmillis <= 0)
// 如果空閒時間達到闕值
if (idlemillis >= timebetweenevictionrunsmillis
|| idlemillis < 0 // unexcepted branch
) // 無效則關閉連線
discardconnection(poolableconnection.holder);
continue;}}
}}
// ...
}
(2) 關閉連線後,如果當前存活數小於最小連線數
空訊號的處理利用的是aqs的condition.sign(),這裡還不確定會不會開啟。condition忘記了~
public void discardconnection(druidconnectionholder holder)
connection conn = holder.getconnection();
if (conn != null)
lock.lock();
try
if (holder.active)
discardcount++;
holder.discard = true;
if (activecount <= minidle)
} finally
}
【有讚db連線池效能優化】
【資料庫連線池的大小配置】
nhibernate連線池配置
nhibernate連線池配置 nhibernate.driver.sqlclientdriver server 127.0.0.1 initial catalog sun user id sun password 123456 min pool size 10 max pool size 50 c...
tomcat 連線池配置
maxidle,最大空閒數,資料庫連線的最大空閒時間。超過空閒時間,資料庫連線將被標記為不可用,然後被釋放。設為0表示無限制。maxactive,連線池的最大資料庫連線數。設為0表示無限制。maxwait 最大建立連線等待時間。如果超過此時間將接到異常。設為 1表示無限制。maxactive 最大連...
Druid連線池配置
druid連線池,在阿里 使用過很好用的。druid集連線池,監控於一體整好復合當前專案的需要,專案是ssm結構,首先spring配置datasource,配置如下 id datasource class com.alibaba.druid.pool.druiddatasource init met...