druid mysql 配置优化_数据库连接池优化配置(druid,dbcp,c3p0)
考虑因素
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配置
推荐配置:
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配置
推荐配置:
参数
配置
说明
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配置
推荐配置:
参数
推荐值
说明
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:在进行心跳检测的时候,会对所有的空闲连接进行心跳检测。如果发现总连接小于最小连接数,则会创建连接,保持最小的连接数。
druid mysql 配置优化_数据库连接池优化配置(druid,dbcp,c3p0)相关推荐
- A103_数据库优化_多机优化
目录 1.内容介绍 2. 分库分表 2.1. 分库分表分析 2.1.1.垂直分表-宽表拆分 2.1.2.垂直分库-按业务分库 2.1.3.水平分表-海量表拆分小表 2.1.4.水平分库-同一业务表拆分 ...
- 数据库连接池优化配置(druid,dbcp,c3p0)
主要描述了数据库连接池参数配置的准则,针对常用的数据库连接池(c3p0,dbcp,druid)给出推荐的配置. 考虑因素 1:当前连接DB的规模 2:并发情况 3:执行db的响应时间 配置考虑 1 ...
- mysql配置数据库连接池_三种数据库连接池的配置
三种数据库连接池的配置及使用(For JDBC) 连接池的优缺点 优点 使用连接池的最主要的优点是性能.创建一个新的数据库连接所耗费的时间主要取决于网络的速 度以及应用程序和数据库服务器的 ( 网络 ...
- hikaricp 连接池分析_数据库连接池终于搞对了,这次直接从100ms优化到3ms!
我在研究HikariCP(一个数据库连接池)时无意间在HikariCP的Github wiki上看到了一篇文章(即前面给出的链接),这篇文章有力地消除了我一直以来的疑虑,看完之后感觉神清气爽.故在此做 ...
- mysql连接池的原理_数据库连接池的实现及原理
对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什么明显的性能上的开销.但是对于一个复杂的数据库应用,情况 ...
- 【JavaWeb】JDBC优化 之 数据库连接池、Spring JDBC
1 数据库连接池 为什么要使用数据库连接池? 数据库连接是一件费时的操作,连接池可以使多个操作共享一个连接 使用连接池可以提高对数据库连接资源的管理 节约资源且高效 概念:数据库连接池其实就是一个容器 ...
- c#打开数据库连接池的工作机制_数据库连接池-tomcat-jdbc使用笔记
现在 主流的数据库连接池有:Proxool.C3P0.DBCP.tomcat-jdbc.Druid.其中tomcat-jdbc是tomcat服务器比较可靠的 数据库连接池. Tomcat 在 7.0 ...
- oracle mysql连接池配置文件_数据库连接池两种配置方式详解
数据库连接池: 负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接 ...
- 数据层优化-jdbc连接池简述、druid简介
终于回到既定轨道上了,这一篇讲讲数据库连接池的相关知识,线程池以后有机会再结合项目单独写篇文章(自己给自己挖坑,不知道什么时候能填上),从这一篇文章开始到本阶段结束的文章都会围绕数据库和dao层的优化 ...
最新文章
- FPGA之道(54)状态机的设计
- 爬取某东600多本书籍,用数据帮你分析哪些Python书籍值得选择(上)
- Qt之Concurrent框架
- 基于Echarts+HTML5可视化数据大屏展示—新能源车联网综合大数据平台(二)
- java aes pbe_JAVA对称加密算法PBE定义与用法实例分析
- 【BZOJ1082】【codevs2456】栅栏,让人抓狂的优化剪枝
- MongoDB的江湖传说
- python中对象排序的两种方式
- pycharm汉化包使用后无法打开设置选项问题
- Android官方开发文档下载
- 微软已修复Windows10蓝屏死亡(BSOD)错误
- 数据面最流行的工具包dpdk的前世-现在和未来
- 任正非:管理上的灰色,是我们的生命之树
- echarts 3D地球
- 计算机白板培训报道,学习电子白板心得体会
- Win10开始菜单中使用搜索时没有反应(解决办法)
- C#高级编程——C#扩展方法+接口,定义统一的搜索接口,基于Unity(三)——图文详解加源码
- ajax与spry的关系,用Spry框架来简化AJAX
- Mac 强制退出程序方法
- 数学建模美赛写作指导20篇(七)-美赛优缺点英文表达
热门文章
- ubuntu之在ubuntu16.04中搭建gitlab服务器
- Open3d之网格(Mesh)操作
- java jdk安装 win10,Win10安装多个jdk,共存环境配置,自由切换
- 用python解析html
- Noip 2016 Day1 题解
- hadoop环境准备-大数据Week5-DAY6-1-hadoop
- linux如何调试脚本程序,调试Linux shell脚本的方法
- Vivado入门使用指南之----按键消抖(仿真与在线逻辑分析仪仿真-不使用ip)
- php7 opcode,php7最小化安装 vld扩展安装并查看php代码的opcode ast测试
- linux发布微软消息队列,消息队列RabbitMQ入门与5种模式详解