数据库连接关键参数推荐配置

 一、MySQL连接参数配置(druid)
1、关键参数配置
  • 连接池大小
a)对于大部分OLTP应用,推荐如下配置:
jdbc.druid.initialSize=4
jdbc.druid.minIdle=4
jdbc.druid.maxActive=12
b)针对高并发的api接口,避免瞬间创建大量连接,推荐设置 minIdle = initSize = maxActive
jdbc.druid.initialSize=12
jdbc.druid.minIdle=12
jdbc.druid.maxActive=12
其中,maxActive可根据实际情况调整到最高24,并且满足:
maxActive < 600/${n_app_instances}
说明:在没有慢查询情况下,SQL执行时间基本在5ms以内,单个连接SQL QPS:1000ms/5ms = 200,若配置 maxActive=12,单个应用实例可以输出SQL QPS:12*200 = 2400
  • 获取连接最大等待时长
druid获取连接等待超时,推荐3000,单位毫秒
  • jdbc.druid.maxWait=3000
    jdbc connect timeout
建立到MySQL Server的超时时间。推荐2000,单位毫秒
  • jdbc socket timeout
jdbc I/O socket read/write超时时间,防止因网络异常导致driver一直阻塞(dead connection),同时,为避免在获取InnoDB行锁超时之前被异常中断,不能配置低于120s(innodb_lock_wait_timeout)
a)高并发API服务,建议配置150000,单位毫秒(不能低于120000),2.5分钟可检测并恢复问题
jdbc:mysql://x.x.x.x:3306/db?connectTimeout=2000&socketTimeout=150000
b)后台系统视具体情况而定(如数据导出业务,根据需要可设置socketTimeout=600000)
jdbc:mysql://x.x.x.x:3306/db?connectTimeout=2000&socketTimeout=600000
若不显式配置socketTimeout,dead conneciton在15分钟后才能被检测到(参考:TCP Timers
  • statement timeout,需低于上述 jdbc socket timeout
  • 连接池连接检测策略
推荐配置:只在空闲时检测
jdbc.druid.validationQuery=SELECT 1
jdbc.druid.testWhileIdle=true
jdbc.druid.testOnBorrow=false
jdbc.druid.testOnReturn=false
2、配置示例
3、druid版本
建议使用最新版本
4、jdbc版本
系列
小版本
5.1.*
5.1.47及以上版本
6.0.*
禁止使用,官方已停止维护
8.0.*
8.0.13及以上版本(禁用8.0.22含bug)
5、其他问题

二、Redis连接参数配置

1、关键参数配置
  • testOnBorrow,testOnReturn,testWhileIdle
  • testOnBorrow=false
    testOnReturn=false
    testWhileIdle=true
    maxTotal,maxIdle,minIdle
a)对大多数应用,推荐配置如下:
maxTotal=12
maxIdle=8
minIdle=4
b)针对高并发的api接口,避免瞬间创建大量连接,推荐使用固定大小连接池,配置如下:
maxTotal=12
maxIdle=12
minIdle=12
说明:与MySQL类似,Redis也有connect timeout、socket timeout相关配置,若Java应用使用的是JedisPool,其默认配置了2s,参数合理,推荐使用(不显式配置即可),显式配置建议:300ms ~ 3s
2、配置示例
 
3、驱动
推荐使用最新驱动
4、其他问题
库请使用db0
spring.redis.database=0

 

posted @ 2024-02-21 14:10  xiaoBai1001  阅读(69)  评论(0编辑  收藏  举报