本文主要对连接池的配置参数,包括 ZDAL 参数、Druid 参数、DBCP 参数、C3P0 参数以及 JDBC 参数等进行介绍。
数据源配置参数
参数含义  | 说明  | ZDAL 参数  | Druid 参数  | DBCP 参数  | C3P0 参数  | 
初始化连接数  | 连接池初始化时建立连接数。  | prefill=true 初始化到 minConn  | initialSize(0)  | initialSize(0)  | initialPoolSize(3)  | 
最小连接数  | 最小可使用连接数,这个会让连接池日常一直保留着这么多个链接。  | minConn(0)  | minIdle(0)  | minIdle(0)  | minPoolSize(3)  | 
最大连接数  | 最大可使用连接数,超过这个连接池会抛连接池已满异常。  | maxConn(10)  | maxActive(8)  | maxActive(8)  | maxActive(8)  | 
链接空闲超时时间  | 设置链接空闲时间一段时间不用时,连接池主动断开链接。MySQL 默认 8 小时断开链接,主备切换时链接会变成脏连接。如果没有这个机制,可能会导致请求失败。云上 OceanBase SLB 超时时间 15 分钟,可以将超时时间设置为 12 分钟。  | idleTimeoutMinutes(30min)  | minEvictableIdleTimeMillis(30min)  | minEvictableIdleTimeMillis(30min) 需要设置 timeBetweenEvictionRunsMillis(-1) > 0 才会生效,该参数控制异步检查周期  | maxIdleTime(0 表示不超时)  | 
连接池获取链接的超时时间  | 如果设置太大的话,链接池满了会导致应用响应太慢。  | blockingTimeoutMillis(500ms)  | maxWait(-1 表示不超时)  | maxWaitMillis(-1 表示不超时)  | checkoutTimeout(0 表示不超时)  | 
连接获取不释放超时时间  | 超时这个时间的话,连接一直没有放回连接池会被直接销毁掉。可以防止连接泄露,但是会影响事务使用时间限制。  | 无  | removeAbandonedTimeoutMillis(300s)  | removeAbandonedTimeout(300s)  | 无  | 
JDBC 配置参数
JDBC 重要的几个参数,一定需要设置。均可以设置到连接池的 ConnectionProperties 中,或者 JdbcUrl 上。具体参数及其说明如下表所示。
参数  | 说明  | 默认值  | 
socketTimeout  | 网络读超时时间,如果不设置默认是 0,使用 OS 默认超时时间  | 5000ms  | 
connectTimeout  | 链接建立超时时间,如果不设置默认是 0,使用 OS 默认超时时间  | 500ms  | 
连接池设置建议
管控台日常的最小连接数保持两个即可,具体根据业务并发及事务时间来调整。
设置连接空闲超时时间 ,推荐 30 分钟。
MySQL 默认 8 小时连接主动断开,客户端无法感知,导致存在脏连接。连接池可以通过心跳、testOnBorrow 等机制来校验连接是否存活,当超过这个时间连接没有使用直接断开。