数据库连接关键参数推荐配置
一、MySQL连接参数配置(druid)
1、关键参数配置
-
连接池大小
a)对于大部分OLTP应用,推荐如下配置:
jdbc.druid.initialSize=4
jdbc.druid.minIdle=4
jdbc.druid.maxActive=12
b)针对高并发的api接口,避免瞬间创建大量连接,推荐设置 minIdle = initSize = maxActivejdbc.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、配置示例
参考wiki:MySQL连接池推荐配置
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=falsetestOnReturn=falsetestWhileIdle=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、配置示例
参考wiki:Dmall Redis 开发规范V1
参数详情:JedisPool资源池优化
3、驱动
推荐使用最新驱动
4、其他问题
库请使用db0
spring.redis.database=0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构