Druid配置参数详解-minIdle
druid
阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
项目地址:https://gitcode.com/gh_mirrors/druid/druid
免费下载资源
·
minIdle是什么意思?
minIdle:连接池中的最小空闲连接数,Druid会定时扫描连接池的连接,如果空闲的连接数大于该值,则关闭多余的连接,反之则创建更多的连接以满足最小连接数要求。
为什么要设置这个参数?
设置这个参数可以应对突发流量,如果没有设置空闲连接,当有多个请求同时调用数据库,但是连接池中并没有可用连接,这时就必须创建连接,创建连接是一个非常耗时的操作,有可能会导致请求超时。
minIdle是怎么起作用的?
当连接池初始化时,会初始化一个定时清除空闲连接的任务DestroyTask,该任务默认是1分钟执行一次(使用timeBetweenEvictionRunsMillis参数设置)
protected void createAndStartDestroyThread() {
destroyTask = new DestroyTask();
if (destroyScheduler != null) {
long period = timeBetweenEvictionRunsMillis;
if (period <= 0) {
period = 1000;
}
//定时清除空闲连接的任务,默认1分钟执行一次
destroySchedulerFuture = destroyScheduler.scheduleAtFixedRate(destroyTask, period, period,
TimeUnit.MILLISECONDS);
initedLatch.countDown();
return;
}
String threadName = "Druid-ConnectionPool-Destroy-" + System.identityHashCode(this);
destroyConnectionThread = new DestroyConnectionThread(threadName);
destroyConnectionThread.start();
}
在这个定时任务中会判断连接池的连接是否满足关闭的条件,如果满足则关闭,满足的条件如下:
- 空闲时间大于minEvictableIdleTimeMillis(默认30分钟),并且空闲连接数大于minIdle;
- 空闲时间大于maxEvictableIdleTimeMillis(默认7小时);
//关闭条件,空闲时间大于minEvictableIdleTimeMillis,并且空闲连接大于minIdle,
// 其中checkCount为poolingCount - minIdle,即可能被关闭的连接数量
//或者空闲时间大于maxEvictableIdleTimeMillis
if (idleMillis >= minEvictableIdleTimeMillis) {
if (checkTime && i < checkCount) {
evictConnections[evictCount++] = connection;
continue;
} else if (idleMillis > maxEvictableIdleTimeMillis) {
evictConnections[evictCount++] = connection;
continue;
}
}
当然也有可能这时数据库中的连接数小于minIdle这个时候就需要创建新的连接了
if (keepAlive && poolingCount + activeCount < minIdle) {
needFill = true;
}
if (needFill) {
lock.lock();
try {
int fillCount = minIdle - (activeCount + poolingCount + createTaskCount);
for (int i = 0; i < fillCount; ++i) {
//通知CreateConnectionTask创建连接
emptySignal();
}
} finally {
lock.unlock();
}
总结
- minIdle的意义是预防突发流量;
- 数据源会在DestroyTask定时检查池中的空闲连接,会关闭多余的连接或者创建新的连接。
- 数据源并不能确保空闲连接一定等于minIdle,可以通过设置timeBetweenEvictionRunsMillis参数调整定时任务的执行间隔,从而控制数据源中空闲连接数更加接近minIdle;
GitHub 加速计划 / druid / druid
27.83 K
8.56 K
下载
阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
最近提交(Master分支:2 个月前 )
f060c270 - 4 天前
1613a765
* Improve gaussdb ddl parser
* fix temp table 5 天前
更多推荐
已为社区贡献7条内容
所有评论(0)