长事务druid数据库连接配置

长事务druid数据库连接配置

当项目中有难以避免的长事务操作时,如果选用的是druid是数据库连接配置,需要对部分参数进行必要设置,不然数据库连接会有各种问题。Oracle一般会是connect time out,而mysql除了会connect time out,还经常会出现Lock wait timeout exceeded或者 from the server was 300,200 milliseconds ago. The last packet sent successfully to the server was 305,021 milliseconds ago.之类的问题,此时查看SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;(mysql8.0以下是此语句,8.0之后是 performance_schema.data_locks表)。会发现表被长时间锁住。在经过不断调试后得到以下配置能解决此类问题。如果本身sql和逻辑没有问题的话,可以尝试对druid进行配置调优。


```yaml
spring.datasource.druid.initial-size=5
#最大活跃连接数 50
spring.datasource.druid.max-active=100
spring.datasource.druid.min-idle=10
#连接超时 60s
spring.datasource.druid.max-wait=60000
spring.datasource.druid.not-full-timeout-retry-count=3
#########连接是否有效
spring.datasource.druid.test-on-return=true
#用来检测连接是否有效的sql,要求是一个查询语句,常用select 'x'。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用
spring.datasource.druid.validation-query=select 1 from dual
#单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法
spring.datasource.druid.validation-query-timeout=1
spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.time-between-eviction-runs-millis=60000
#配置一个连接在池中最小生存的时间,单位是毫秒
spring.datasource.druid.min-evictable-idle-time-millis=300000
#连接出错尝试几次重新连接
spring.datasource.druid.connection-error-retry-attempts=3

spring.datasource.druid.keep-alive=true


#######druid recycle Druid的连接回收机制 日志查看
#超过时间限制是否回收
#spring.datasource.druid.removeAbandoned=true
#超时时间;单位为秒。180=3分钟
#spring.datasource.druid.removeAbandonedTimeout=1800
#关闭abanded连接时输出错误日志
#spring.datasource.druid.logAbandoned=true

``
其中removeAbandoned这个参数一定要关闭,这个参数本身是调试参数,会强制关闭到removeAbandonedTimeout这个时间的数据源。我们当时有同事打开了这个参数,导致怎么调优都不起作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值