数据库连接池优化配置(druid,dbcp,c3p0)
主要描述了数据库连接池参数配置的准则,针对常用的数据库连接池(c3p0,dbcp,druid)给出推荐的配置。
考虑因素
1:当前连接DB的规模 2:并发情况 3:执行db的响应时间
配置考虑
1:初始化连接:可考虑设置为3个连接 。对于db规模特别大的情况下可考虑设置为1个。避免启动时间过长;
2:最小连接:可考虑该值的设置和初始化连接保持一致;
3:最大连接:对于有较大DB规模,最大连接不要设置过大,避免本地维护的db太大。 如果对应到数据源的并发数过高,可考虑增大最大连接数。
4:获取连接的超时时间:如果连接全部被占用,需要等待的时间。可以根据当前系统的响应时间判定,如果容忍度较高,可以大点。容忍度较低,设置小点。
5:当获取连接和释放连接心跳检测:建议全部关闭,否则每个数据库访问指令会对数据库生产额外的两条心跳检测的指令,增加数据库的负载。连接有效性的检查改用后台空闲连接检查。
6:连接有效性检测时间:该值需要结合数据库的wait_timeout,interactive_timeout值进行设置。假如数据库为120s,则心跳检测时间在120s以内越大越好。如果太小,心跳检测时间会比较频繁。建议设置为90s。
7:最大空闲时间:如果连接超过该时间没有使用过,则会进行close掉。 该值不要太小,避免频繁的建立连接关闭连接。也不要太大,导致一直无法关闭。
8:心跳检查的sql语句:尽量使用ping命令,ping的性能较查询语句高。大部分的数据库连接池不配置query语句,便会调用ping命令。
9:prepareStatement缓存:可以根据自己的业务来判定是否开启。开启后对性能的影响依赖于具体业务和并发情况。可考虑暂时不开启。
10:连接使用超时:业务拿到一个连接,如果超过指定的时间未归还,是否把该连接给给回收掉。超时时间等和具体的业务关联。暂时建议先不开启。
下面主要给出:druid,dbcp,c3p0 三种连接池的推荐配置
druid配置
介绍:https://github.com/alibaba/druid
推荐配置:
initialSize | 3 | 初始化配置 |
minIdle | 3 | 最小连接数 |
maxActive | 15 | 最大连接数 |
maxWait | 5000 | 获取连接超时时间(单位:ms) |
timeBetweenEvictionRunsMillis | 90000 | 连接有效性检测时间(单位:ms) |
testOnBorrow | false | 获取连接检测 |
testOnReturn | false | 归还连接检测 |
minEvictableIdleTimeMillis | 1800000 | 最大空闲时间(单位ms) |
testWhileIdle | true | 在获取连接后,确定是否要进行连接空间时间的检查 |
配置说明:
1:minEvictableIdleTimeMillis(最大空闲时间):默认为30分钟,配置里面不进行设置。
2:testOnBorrow ,testOnReturn 默认为关闭,可以设置为不配置。
3:testWhileIdle(在获取连接后,确定是否要进行连接空闲时间的检查)。默认为true。配置里面不再进行设置。
流程说明:
1:在第一次调用connection的时候,才会进行 initialSize的初始化。
2:心跳检测时间线程,会休眠timeBetweenEvictionRunsMillis时间,然后只对(没有borrow的线程 减去 minIdle)的线程进行检查,如果空闲时间大于minEvictableIdleTimeMillis则进行close。
3:testWhileIdle必须设置为true,在获取到连接后,先检查testOnBorrow,然后再判定testwhileIdle,如果连接空闲时间大于timeBetweenEvictionRunsMillis,则会进行心跳检测。
4:不需要配置validationQuery,如果不配置的情况下会走ping命令,性能更高。
5:连接保存在数组里面,获取连接的时候,获取数组的最后一位。在timeBetweenEvictionRunsMillis时是从前往后进行检查连接的有效性。
dbcp配置
介绍:http://commons.apache.org/proper/commons-dbcp/configuration.html
推荐配置:
参数 | 配置 | 说明 |
initialSize | 3 | 初始化配置 |
minIdle | 3 | 最小连接数 |
maxIdle | 15 | 最大空闲连接 |
maxTotal |
15 | 最大连接数 |
maxWaitMillis | 5000 | 获取连接超时时间(单位ms) |
timeBetweenEvictionRunsMillis | 90000 | 心跳检测时间(单位ms) |
minEvictableIdleTimeMillis | 1800000 | 最大空闲时间(单位ms) |
testOnBorrow | FALSE | 获取连接检测 |
testOnReturn | FALSE | 归还连接检测 |
numTestsPerEvictionRun | -1 | 空闲连接检查的个数 |
testWhileIdle | TRUE | 是否开启对空闲连接的检查 |
配置说明:
1:关于maxidle和maxTotal尽量保持一致。
2:numTestsPerEvictionRun 设置为-1,代表对所有的连接均进行检查。默认值为3。-1代表对全部idle的连接检查有效性。 否则有可能造成部分连接的有效性未进行检查。
3:testWhileIdle 也必须为true,代表需要检查有效性。
4:minEvictableIdleTimeMillis默认值为30分钟,可以不用进行设置。
5:testOnReturn默认值为false,可以不用设置。但是testOnBorrow必须进行设置为false,默认值为true。
6:validationQuery不配置默认走ping命令
流程说明:
1:在第一次调用connection的时候,才会进行 initialSize的初始化。
2:不需要配置validationQuery,如果不配置的情况下会走ping命令,性能更高。
3:连接保存在LinkedBlockingDeque 中。来做并发的控制。
4:后端会有一个定时任务,间隔为timeBetweenEvictionRunsMillis,先确定需要对多少线程进行检测(numTestsPerEvictionRun控制),然后判定是否超过minEvictableIdleTimeMillis,如果超过则close掉。没有超过,则判定testWhileIdle为true的话,进行心跳检查。如果检查失败则关闭连接。
5:在return连接的时候会判定maxIdle,如果当前空闲连接是否大于maxIdle,则会关闭掉连接。
c3p0配置
介绍: http://www.mchange.com/projects/c3p0/
推荐配置:
参数 | 推荐值 | 说明 |
initialPoolSize | 3 | 初始化配置 |
minPoolSize | 3 | 最小连接数 |
maxPoolSize | 15 | 最大连接数 |
acquireIncrement | 1 | 每次获取的个数 |
checkoutTimeout | 5000 | 获取连接超时时间(单位ms) |
idleConnectionTestPeriod | 90 | 心跳检测时间(单位 s) |
maxIdleTime | 1800 | 最大空闲时间(单位 s) |
testConnectionOnCheckout | FALSE | 获取连接检测 |
testConnectionOnCheckin | FALSE | 归还连接检测 |
numHelperThreads |
1 |
配置说明:
1:testConnectionOnCheckout和testConnectionOnCheckin默认为false,可不用配置
2:preferredTestQuery不用配置,默认走ping命令。
3:numHelperThreads 默认是开启3个线程。如果数据源较多,这里会存在较多线程。 这里设置为1,避免线程较多的情况。
流程说明:
1:在第一次调用connection的时候,才会进行 initialPoolSize的初始化。
2:在进行心跳检测的时候,会对所有的空闲连接进行心跳检测。如果发现总连接小于最小连接数,则会创建连接,保持最小的连接数。
原文链接:https://blog.csdn.net/hetaohappy/article/details/51861015
转载于:https://www.cnblogs.com/oycyqr/p/9509424.html
数据库连接池优化配置(druid,dbcp,c3p0)相关推荐
- druid mysql 配置优化_数据库连接池优化配置(druid,dbcp,c3p0)
考虑因素 1:当前连接DB的规模 2:并发情况 3:执行db的响应时间 配置考虑 1:初始化连接:可考虑设置为3个连接 .对于db规模特别大的情况下可考虑设置为1个.避免启动时间过长: 2:最小连 ...
- mysql配置数据库连接池_三种数据库连接池的配置
三种数据库连接池的配置及使用(For JDBC) 连接池的优缺点 优点 使用连接池的最主要的优点是性能.创建一个新的数据库连接所耗费的时间主要取决于网络的速 度以及应用程序和数据库服务器的 ( 网络 ...
- C3P0数据库连接池的配置
在pom.xml文件中导入jar包 <dependency><groupId>com.mchange</groupId><artifactId>c3p0 ...
- dbcp连接池配置mysql_dbcp数据库连接池的配置和使用
dbcp连接池是Apache旗下的软件,开源连接池,使用步骤如下: 1)导入dbcp的jar包 commons-dbcp-1.4.jar 核心包 commons-pool-1.5.6.jar 辅助包 ...
- java 连接池 druid_从零开始学 Java - 数据库连接池的选择 Druid
我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...
- 数据库连接池为什么首选Druid
Spring Boot 作为主流微服务框架,拥有成熟的社区生态.市场应用广泛,为了方便大家,整理了一个基于spring boot的常用中间件快速集成入门系列手册,涉及RPC.缓存.消息队列.分库分表. ...
- java tomcat数据库连接池_tomcat配置数据库连接池2
数据库连接是比较耗时的操作,如果每次访问数据库都开闭一次连接的话,在大批量访问时,必然会导致性能问题,于是这里成为了你的性能瓶颈.为了解决这个问题, 为了简化通过连接池获取数据库连接的过程,JDBC2 ...
- c3po数据库连接池简单配置
此次C3P0数据库连接池配置以maven项目为准: 1.首先先将c3p0的依赖导入: <dependency> <groupId>com.mchange</gro ...
- java通过数据库连接池的方式连接数据库(C3P0)
数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏 ...
最新文章
- Java字符编码的转化问题
- 人工智能:一种现代方法汇总
- 互联网金融产品做第三方支付平台托管需要注意什么?
- 安卓中bundle的使用
- 计算机没有程序,计算机小知识:想尝试写程序却没有电脑?这个在线编辑器满足你...
- 【图论】【最短路】【SPFA】【USACO题库】2.4.4 Bessie Come Home回家(jzoj 1274)
- 汇编写java模块_java – maven汇编插件moduleset源指令不包括任何文件,不符合附带的模块...
- 大数据之Yarn——Capacity调度器概念以及配置
- C# 中的可变参数方法(VarArgs)
- 信息学奥赛一本通(2017:【例4.2】输出偶数)
- hbase原理与实践_JAVA连接HBase客户端及HBase写入数据和读取数据原理解析
- 容器编排技术 -- 使用Vagrant本地运行Kubernetes
- python开发mes系统_MES系统开发
- 解决CsrfFilter与Rest服务Post方式的矛盾
- 4. 哪些视图中的数据不可以增删改操作?_MySQL之视图
- 2009年即将过去,准备迎接2010
- 日常赠书 | 王者荣耀的觉悟AI是怎么训练的?
- IDEA - Live Template
- 1月计算机会议,计算机类 | 2019年1月截稿国际会议信息8条
- input子系统驱动学习之中的一个
热门文章
- springsession分布式登录被覆盖_拉勾 分布式 学习小结
- 传统form表单提交方式的文件上传与文件存储
- python如何更改entry属性_如何在Python3中更改Gtk3 Entry文本颜色?
- HTML+CSS+JS实现 ❤️个人相册封面卡片❤️
- 《零基础》MySQL DELETE 语句(十五)
- mvc5控制器修改html,关于jquery:如何通过对控制器的ajax调用在MVC5中呈现局部视图并返回HTML...
- 宁波大学2020计算机技术复试线,宁波大学关于公布2020年硕士研究生复试分数线的通知...
- matlab 微秒 符号,matlab处理csi
- IOS ActivityIndicator 活动指示器使用
- 关于 mac m1 xcode12 编译报错 this target. for architecture arm64等问题解决方案