数据库连接池优化配置(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

 推荐配置:

initialSize3初始化配置
minIdle3最小连接数
maxActive15最大连接数
maxWait5000获取连接超时时间(单位:ms)
timeBetweenEvictionRunsMillis90000连接有效性检测时间(单位:ms)
testOnBorrow false获取连接检测
testOnReturn false归还连接检测
minEvictableIdleTimeMillis1800000最大空闲时间(单位ms)
testWhileIdletrue在获取连接后,确定是否要进行连接空间时间的检查

配置说明:

           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

 推荐配置:

参数配置说明
initialSize3初始化配置
minIdle3最小连接数
maxIdle15最大空闲连接
maxTotal
15最大连接数
maxWaitMillis5000获取连接超时时间(单位ms)
timeBetweenEvictionRunsMillis90000心跳检测时间(单位ms)
minEvictableIdleTimeMillis1800000最大空闲时间(单位ms)
testOnBorrowFALSE获取连接检测
testOnReturnFALSE归还连接检测
numTestsPerEvictionRun-1空闲连接检查的个数
testWhileIdleTRUE是否开启对空闲连接的检查

 配置说明:

         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/

  推荐配置:

参数推荐值说明
initialPoolSize3初始化配置
minPoolSize3最小连接数
maxPoolSize15最大连接数
acquireIncrement1每次获取的个数
checkoutTimeout5000获取连接超时时间(单位ms)
idleConnectionTestPeriod90心跳检测时间(单位 s)
maxIdleTime1800最大空闲时间(单位 s)
testConnectionOnCheckoutFALSE获取连接检测
testConnectionOnCheckinFALSE归还连接检测
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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570515.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows系统上3种连接Docker虚拟机的方法

1.Docker Quickstart Terminal 打开 "Docker Quickstart Terminal" 然后输入 $ docker-machine ssh <docker machine name> 此处Docker虚拟机的名字是default&#xff1a; 2. gitBash 打开 "gitBash" &#xff0c;然后输入&#xff1a; $ docker-ma…

P2258 子矩阵

题目描述 给出如下定义&#xff1a; 子矩阵&#xff1a;从一个矩阵当中选取某些行和某些列交叉位置所组成的新矩阵&#xff08;保持行与列的相对顺序&#xff09;被称为原矩阵的一个子矩阵。例如&#xff0c;下面左图中选取第 222 、 444 行和第 222 、 444 、 555 列交叉位置的…

Windows 系统安装Docker Compose 步骤

参考 Docker Compose official 官方安装指南: https://docs.docker.com/compose/install/ 实际上到目前为止还不能直接在Windows上安装Docker Compose&#xff0c;所以这篇文章要讲的是如何在Windows上使用Docker Compose。 先决条件: Docker Machine 已经安装完毕。 解决方案:…

vagrant box各种命令汇总

最近在研究laravel&#xff0c;中间用到了vagrant 虚拟机管理工具&#xff0c;学习一下他的命令 vagrant box命令 用于管理boxes的命令&#xff0c;比如添加、删除等等。 此命令的功能主要通过以下子命令完成&#xff1a; add list outdated prune remove repackage update Box…

运行第一个 docker image 并在浏览器中查看

1. SSH to Docker 虚拟机. 打开gitBash或者Docker Quickstart Terminal, 并且输入: <span style"font-size:14px;">$ docker-machine ssh <docker machine name></span>如需要更详细的如何连接Docker Machine的介绍&#xff0c;可以参考我的另一篇…

js_!和!!的使用

js中有些特殊的数据&#xff08;“” 0 null undefined NaN&#xff09;,请求后台返回的数据中往往都有一些这样的数据&#xff0c;需要对这些数据进行过滤。 过滤代码 var a 0;//0 "" null undefined NaN //如果有内容不为&#xff08;0 "" null undefi…

Fixed Function Shader

Fixed function shader(固定管线着色器) Shader "Custom/Text01" { //shader名称 Properties   Shader属性 { //定义一个名称为Main Color属性 _Color ("Main Color", Color) (1,0.5,0.5,1) _SpecularColor("高光颜色"…

linux 时间同步ntp

配置前准备:关闭防火墙,配置好hosts,ssh免密登录 1.选定同步的标准,我是以hadoop002(设置为当前时间)作为同步标准,hadoop003(时间是2018年3月21,使用date -s进行设置)与hadoop004(2018年3月21)与之保持同步 在hadoop002上查看是否安装ntp rpm -qa|grep ntp,如果没有显示内容说…

Hadoop集群(一) Zookeeper搭建

作为Hadoop初学者&#xff0c;自然要从安装入手。而hadoop的优势就是分布式&#xff0c;所以&#xff0c;也一定要安装分布式的系统。 整体安装步骤&#xff0c;包括ZookeeperHDFSHbase&#xff0c;为了文章简洁&#xff0c;我会分三篇blog记录我的安装步骤。 本文记录的是集群…

四六级成绩查询,你的『验证码』刷出来了吗?

沉浸在暑假余温里的小可爱们&#xff0c;今天被四六级成绩查询的验证码无情的伤害了一次。 就在8月22日&#xff0c;也就是今天上午9点&#xff0c;学霸们泰然自若&#xff0c;学渣们瑟瑟发抖&#xff0c;有的人甚至在心里考虑是否发微博、朋友圈谢谢超越姐姐&#xff08;此时输…

IOS自动化打包平台

http://note.youdao.com/noteshare?iddf404ef54eaf2b5104478e05427550d5转载于:https://www.cnblogs.com/songhaozhi080616/p/9524758.html

课时40:类与对象:一些相关的BIF

目录&#xff1a; 一、一些相关的BIF 二、、课时40课后习题及答案 ********************** 一、一些相关的BIF ********************** 1、issubclass&#xff08;class,classinfo&#xff09; 如果第一个参数&#xff08;class&#xff09;是第二个参数&#xff08;classinfo…

Visual Studio Code搭建NodeJs的开发环境

一、Visual Studio Code搭建NodeJs的开发环境 1.下载安装NodeJs并配置环境变量 可以参考&#xff1a;NodeJs的安装和环境变量配置 2.下载安装 VS Code编辑器 可以参考&#xff1a;VsCode插件整理 3.使用Typings工具配置VS Code 的智能提示 可以参考&#xff1a; VS Code智能提示…

HashMap和Hashtable 线程安全性

HashMap和Hashtable的比较是Java面试中的常见问题&#xff0c;用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap的工作原理、ArrayList与Vector的比较以及这个问题是有关Java 集合框架的最经典的问题。Hashtable是个过时的集合类&#…

Luogu P1280 Niko的任务【线性dp】By cellur925

Nikonikoni~~ 题目传送门 这是当时学长讲dp的第一道例题&#xff0c;我还上去献了个丑&#xff0c;然鹅学长讲的方法我似董非董(??? 我当时说的怎么设计这道题的状态&#xff0c;但是好像说的是二维&#xff0c;本题数据范围均在10000级别&#xff0c;n肯定会空间炸掉的&…

这项技术竟然一个字也不放过!

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 本文由腾讯云AI中心发表于云社区专栏 摘要&#xff1a;在日常生活工作中&#xff0c;我们难免会遇到一些问题&#xff0c;比如自己辛辛苦苦写完的资料&#xff0c;好不容易打印出来却发现源文件丢了;收集了…

AltiumDesigner17快捷键

画线CtrlW转载于:https://www.cnblogs.com/scrazy/p/9533996.html

Capistrano deploy flow outline

Official flow reference: 点击打开链接 An example flow: Deploy: starting Rbenv ensures that the version we configured on config/deploy.rb is installed and that it can write on disc. Checks git repository Create needed folder tree /var/www App_name Shared Pu…

nginx应用geoip模块,实现不同地区访问不同页面的需求(实践版)

https://www.52os.net/articles/configure-nginx-using-geoip-allow-whitelist.html 搞了几天没有搞定&#xff0c;这篇文章一下子解决了问题&#xff0c;点赞 记得nginx编译时一定要加载geoip这个模块 https://blog.csdn.net/beyond__devil/article/details/52838422 …

GoCD notes

Every task in a job is run as an independent program.Changes made by a task to any of its environment variables will not affect subsequent tasks.Changes made by a task on the file system will be visible to subsequent tasks.