数据库访问超时时间配置总结
1.背景
访问数据库超时间太长,访问数据量大或者扫描的数据量太大,导致数据库长时间无响应。链接被占用无法释放,会导致线程池被占满。
因此,为了能够及时释放占用链接,其他业务对数据库访问不受影响,所以要合理设置数据库访问超时时间。
2.配置说明
2.1connectionTimeout配置大小
Jdbc的connectTimeout配置是指等待与数据库建立socket链接的超时时间。如果未设置,默认为0,代表永不超时。
代码中checkoutTimeout的配置设置为1000s,表示连接池中连接获取链接超时时间,设置过大会导致接口响应变慢。
参考收单侧的经验值,connectTimeout设置为1000ms。
2.2socketTimeout配置大小
socketTimeout的配置是指客户端与数据库建立socket后,读写socket时的等待的超时时间。如果未设置,默认为0,代表永不超时。zebra默认的socketTimeout设置为60s。
根据对服务数据库访问统计发现最长为1-2s,socketTimeout可设置为3s
3.方案
3.1数据库SDK配置修改
连接池连接超时等设定需要设置到extraJdbcUrlParams参数中如下:
<property name="extraJdbcUrlParams" value="connectTimeout=1000&socketTimeout=3000&useSSL=false"/>
jdbcdriver 5.1.36及以上版本需要在jdbcurl设置 "useSSL=false" 参数, 可以通过此方式设置
3.2 默认SDK配置修改
修改jdbcRef配置
3.3最终方案
|
优点 |
不足 |
结果 |
---|---|---|---|
Db-client-SDK |
|
|
|
RDS-Zebra |
|
|
|