Druid
Druid 参数
spring.datasource.url = jdbc:mysql://HOST:Port/Dbname?autoReconnect=true&allowMultiQueries=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai&connectTimeout=3000&socketTimeout=10000
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.initialSize = 10
spring.datasource.minIdle = 5
spring.datasource.maxActive = 30
spring.datasource.maxWait = 60000
spring.datasource.timeBetweenEvictionRunsMillis = 60000
spring.datasource.minEvictableIdleTimeMillis = 300000
spring.datasource.validationQuery = SELECT 1 FROM DUAL
spring.datasource.testWhileIdle = true
spring.datasource.testOnBorrow = false
spring.datasource.testOnReturn = false
参数项 | 参数说明 | 默认值 | 推荐值 |
useLocalSessionState | 配置驱动程序是否使用autocommit,read_only和transaction isolation的本地属性值,避免JDBC driver每次都去检查server端是否是ReadOnly,autocommit | false | true |
allowMultiQueries | 控制 jdbc 连接 db 时,是否需要 proxy支持对客户端同时发送给proxy的多个语句分别进行处理,但不会影响rewriteBatchStatements的addBatch()和executeBatch()方法。 分布式实例中必须开启网关参数 gateway.mode.multi_query.open=1 |
false | true |
useUnicode | 是否使用Unicode字符集。强制使用mysql本身不支持的字符集时需要使用该参数characterEncoding=gbk&useUnicode=true 表示使用gbk字符集,按需配置 | false | true |
characterEncoding | 字符编码格式。当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk | ||
serverTimezone | 时区设置,建议中国区部署设置为Asia/Shanghai | LOCAL | Asia/Shanghai |
netTimeoutForStreamingResults | 使用场景:一般在网络条件比较差的时,或者客户端处理每个block耗时比较长时 当使用StremResultSet结果集时,建议配置该参数为0(即应用端不配置,直接使用数据库服务器超时时间),保证使用数据库的默认超时时间,当服务端等待时间超过60秒,服务端会与客户端断链,JDBC抛出异常: Communications link failure |
600 | 0 |
useCursorFetch | 使用游标开关,但分布式实例不支持游标,建议关闭,在分布式场景下可以在应用层采用流式查询进行替代改造 | true | false |
useSSL(参数已被 sslMode代替,可通用使用) | 与数据库之间连接是否使用加密连接。建议互联网部署应用开启加密连接。开启后由于数据链路加密传输,影响部分性能。非互联网应用按需配置。说明:tdsql网关节点进已进行适配,默认开启useSSL后,jdbc参数中无需配置allowPublicKeyRetrieval=true(关闭方式:useSSL=false,或sslMode=DISABLED) | true | |
useServerPrepStmts | 是否开启服务端预编译模式,如果开启则能让服务端执行预处理语句。(需要服务端支持) | true | true |
cachePrepStmts | 是否开启缓存预处理语句的功能,如果开启,jdbc会缓存预处理statement信息,而不需要每次都重新发起预编译; tdsql不建议开启该参数 |
false | false |
prepStmtCacheSqlLimit | 预处理语句长度限制,该配置控制客户端缓存预处理语句的最大长度,超过该长度将不会被缓存。 | 256 | 视内存情况尽量调大 |
prepStmtCacheSize | 可以缓存预处理语句的个数,采用LRU队列缓存,当达到最大预处理语句个数时,替换最久未被使用的预处理语句。 | 25 | 视内存情况尽量调大 |
rewriteBatchedStatements | 是否开启构造多值批量插入功能,用于保证jdbc driver可以批量执行SQL,按需配置 | batch相关 | |
connectTimeout | socket连接超时(以毫秒为单位),0表示无超时。如果与数据库请求建立连接的时间超过ConnectionTimeOut,就会ConnectionTimeOutException。 | 0 | 建议综合考虑业务实际负载情况,选择超时时间。 |
socketTimeout | 网络socket操作超时(以毫秒为单位)。默认值0表示没有超时。如果服务器处理数据用时过长,超过了SocketTimeOut,就会抛出SocketTimeOutExceptin,即服务器响应超时,服务器没有在规定的时间内返回给客户端数据。 | 0 | 建议根据业务最慢语句的执行时间来设置超时时间。 |
参数项 | 参数说明 | 配置建议 |
initial-size | 初始化时建立物理连接的个数 | 初始化连接数,一般10以内可以满足。 |
max-active | 最大连接池数量 | 一般情况下配置max-active=20以内已经够用,可根据实际业务情况调整,不建议配置太大,对db而言过多连接反而会降低吞吐 |
min-idle | 最小连接池数量 | druid定期扫描该配置以维持最小空闲连接数,一般10以内,可与initial-size设置成一样。 |
max-wait | 获取连接时最大等待时间,单位毫秒 | 指应用线程等待连接的超时。可以配几秒范围,根据业务应用实际情况进行判定。 |
time-between-eviction-runs-millis | 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 | 1) Destroy 线程会检测连接的间隔时间,如果连接空闲时间大于等于min-evictable-idle-time-millis则关闭物理连接。 2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明 建议保值默认值60000即可 |
min-evictable-idle-time-millis | 连接保持空闲而不被驱逐的最小时间 | 建议保持默认值300000即可 |
validation-query | 用来检测连接是否有效的sql,要求是一个查询语句 | 相当于心跳健康检查的判定语句,建议发送有效的非业务简单查询sql,如SELECT 1,如果validation-query为null,test-while-idle、test-on-borrow、test-on-return都不会起作用。 |
test-while-idle | 设置从连接池获取连接时是否检查连接有效性,设置true时,如果连接空闲时间超过min-evictable-idle-time-millis进行检查,否则不检查;false时,不检查 | 建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测, |
test-on-borrow | 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 | 从连接池里取出时,连接池是否需要对连接进行健康探测,会影响性能,建议设置false,除非网络极端不稳定情况下确保连接可靠性开启。 |
test-on-return | 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 | 归还到连接池时进行健康检查,会影响性能,建议设置false。 |
pool-prepared-statements | 是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大。 | TDSQL分布式实例不支持游标,建议设置false;集中式实例如果有用到游标建议设置true。 |
max-pool-prepared-statement-per-connection-size | 开启PSCache每个连接最多缓存多少条SQL | 要启用PSCache,必须配置大于0,当大于0时,pool-prepared-statements自动触发修改为true。 |
remove-abandoned | 连接泄露检查,连接从连接池借出后,长时间不归还,将触发强制回连接。回收周期随time-between-eviction-runs-millis进行,如果连接为从连接池借出状态,并且未执行任何sql,并且从借出时间起已超过remove-abandoned-timeout时间,则强制归还连接到连接池中。 | 建议保持默认false即可,对连接泄漏场景敏感可根据实际情况考虑。 |
remove-abandoned-timeout | 设置druid强制回收连接的时限,当程序从池中get到连接开始算起,druid将强制回收该连接,单位秒。 | 如果需要开启remove-abandoned,建议该项配置时间不要太短,因为业务长时间使用连接,所以超时时间要比业务实际合理时间要长。 |