首页 > 数据库 >常用的数据库连接池、配置参数及相应的调优方法

常用的数据库连接池、配置参数及相应的调优方法

时间:2023-06-26 20:04:04浏览次数:37  
标签:数据库 druid c3p0 调优 hikari 连接 连接池

数据库连接池是一种用于管理和维护数据库连接的技术,不同类型的数据库连接池具体的配置参数和调优方法也是有所不同的。下面分别举例 C3P0、DBCP、HikariCP 和 Druid 的常用配置信息和调优建议:

C3P0

常用配置参数:

# 连接池中容许的最小连接数目
c3p0.minPoolSize=5
# 连接池中容许的最大连接数目
c3p0.maxPoolSize=50
# 连接池初始连接数
c3p0.initialPoolSize=10
# 连接池当中每次新创建的连接数目
c3p0.acquireIncrement=5
# 测试可用连接的查询语句
c3p0.preferredTestQuery=SELECT 1
# 每隔多长时间检查所有连接池中的空闲连接
c3p0.idleConnectionTestPeriod=60
# 连接池中连接存活的最长时间
c3p0.maxIdleTime=600
# 从连接池中取出连接的超时时间
c3p0.checkoutTimeout=5000
# 是否在从连接池中获取连接时测试该连接是否有效
c3p0.testConnectionOnCheckout=true

调优建议:

  • 增加 maxPoolSize 可以提高并发量,但也会占用更多的资源。
  • 减少 idleConnectionTestPeriod 可以避免因为空闲连接而导致的资源浪费。
  • 使用 c3p0.preferredTestQuery 配置自定义 SQL 测试语句可以提高性能。

DBCP

常用配置参数:

# 连接池初始连接数
dbcp.initialSize=5
# 连接池中容许的最大连接数目
dbcp.maxActive=20
# 连接池中容许的最小连接数目
dbcp.maxIdle=10
# 最长等待时间,单位毫秒,-1 表示无限等待
dbcp.maxWait=-1
# 借连接时是否进行有效性检查
dbcp.testOnBorrow=true
# 归还连接时是否进行有效性检查
dbcp.testWhileIdle=true
# 多长时间检查一次空闲连接,单位毫秒
dbcp.timeBetweenEvictionRunsMillis=1800000
# 每次检查空闲连接的数量
dbcp.numTestsPerEvictionRun=3
# 空闲连接存活的最长时间,单位毫秒
dbcp.minEvictableIdleTimeMillis=1800000

调优建议:

  • 增加 maxTotal 可以提高并发量,但也会占用更多的资源。
  • 减小 maxIdle 可以减少空闲连接占用的资源。
  • 使用 testOnBorrow 和 testOnReturn 等测试机制可以提高连接质量和可靠性。

HikariCP

常用配置参数:

# 数据源类名
hikari.dataSourceClassName=com.mysql.jdbc.jdbc2.optional.MysqlDataSource
# 连接池中容许的最大连接数目
hikari.maximumPoolSize=100
# 连接池中容许的最小连接数目
hikari.minimumIdle=10
# 连接池当中每次新创建的连接数目
hikari.connectionTimeout=30000
# 连接在池中的最大生存时间,单位毫秒
hikari.idleTimeout=60000
# 数据库服务器名称
hikari.dataSource.serverName=localhost
# 数据库端口号
hikari.dataSource.portNumber=3306
# 数据库名称
hikari.dataSource.databaseName=example
# 数据库用户名
hikari.dataSource.user=root
# 数据库密码
hikari.dataSource.password=root
# 连接池名称
hikari.poolName=ExamplePool

调优建议:

  • 增加 maximumPoolSize 可以提高并发量,但也会占用更多的资源。
  • 减小 idleTimeout 可以减少空闲连接占用的资源。
  • 使用 cachePrepStmts 等参数可以提高性能和安全性。

Druid

常用配置参数:

# 连接池初始连接数
druid.initialSize=5
# 连接池中容许的最大连接数目
druid.maxActive=20
# 连接池中容许的最小连接数目
druid.minIdle=5
# 最长等待时间,单位毫秒
druid.maxWait=60000
# 多长时间检查一次空闲连接,单位毫秒
druid.timeBetweenEvictionRunsMillis=300000
# 空闲连接存活的最长时间,单位毫秒
druid.minEvictableIdleTimeMillis=600000
# 是否在取连接前进行有效性检查
druid.testWhileIdle=true
# 是否在归还连接前进行有效性检查
druid.testOnBorrow=false
# 是否在归还连接时检查连接的可用性
druid.testOnReturn=false
# 用于检测连接是否有效的 SQL 查询语句
druid.validationQuery=SELECT 'x'
# 连接池使用的过滤器链
druid.filters=stat,wall,log4j
# 是否开启日志记录功能
druid.logAbandoned=true

调优建议:

  • 增加 maxActive 可以提高并发量,但也会占用更多的资源。
  • 减小 timeBetweenEvictionRunsMillis 和 minEvictableIdleTimeMillis 可以减少空闲连接占用的资源。
  • 使用 testWhileIdle 和 validationQuery 等测试机制可以提高连接质量和可靠性。

需要注意的是,具体的配置参数和调优方法可能因数据库的类型和版本、应用服务器的使用情况等而异。为了获得最佳的数据库连接池性能和可靠性,我们需要结合实际需求进行选择和优化,同时参考互联网上的相关资料和经验,不断调整和完善连接池的配置。

在使用数据库连接池时,还需要注意以下几个问题:

1. 连接泄漏:当连接池中的连接没有被释放而一直占用时,就会造成连接泄漏,从而导致系统崩溃。为了避免这种情况,需要在代码中明确地关闭连接。
2. 安全性:数据库连接池中可能会存在密码泄露等安全问题,因此需要使用 SSL 加密或者其他安全机制来保证数据的安全。
3. 监控和统计:要及时监控和统计数据库连接池的状态和性能指标,以便进行及时调整和优化。

总之,数据库连接池是开发中不可或缺的技术之一。通过合理配置和调优,可以大幅度提升数据库操作的性能和可靠性,从而为开发者和用户带来更好的体验。

标签:数据库,druid,c3p0,调优,hikari,连接,连接池
From: https://www.cnblogs.com/silgen/p/17506452.html

相关文章

  • Mybatis 使用汇总(介绍,功能,连接池,日志,注解,XML映射文件)
    Mybatis介绍Mybatis功能Mybatis连接池mybatis日志Mybatis注解MybatisXML映射文件01.Mybatis是一款优秀的持久层框架(DAO),它支持自定义SQL、存储过程以及高级映射。MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作。MyBatis可以通过简单的XML......
  • mybatis中数据库连接池切换到更优秀的连接池上
    数据库连接池切换mybatis中数据库连接池比较流行,性能优越的有2个:数据库连接池技术:A.Hikari(springboot默认)追光者B.Druid(德鲁伊)1Druid(德鲁伊)Druid连接池是阿里巴巴开源的数据库连接池项目功能强大,性能优秀,是Java语言最好的数据库连接池之一2Hikari(springboot默认3.把默......
  • c# 操作mysql数据库的时候会出现 插入中文汉字变成问号?或者更新数据库时条件里有汉字,
    在mysql里面执行时没有问题的。c#操作会出现问号或者更新失败。原因是: 链接字符串的时候要设置Charset=utf8;不然就会按默认的服务器设置编码,通常会出问题。1、创建的数据库是按utf8编码格式。 2、表也是utf8格式。3、链接字符串增加Charset=utf8;如:"server=10.167.32......
  • psycopg2用python生成一些数据插入pg数据库
    创建学生表,用python随机生成姓名,性别,班级,省,市,生日插入数据库中先把姓名和省市以字典方式存入单独文件fromname_dictimportnamefromcity_dictimportcityfromrandomimportchoice,randintfromdatetimeimportdateimportpsycopg2aspgconn=pg.connect(data......
  • 时序数据库 TDengine 与腾讯云多个产品线完成兼容性互认证明
    随着数字经济蓬勃发展,数据成为驱动企业数字化转型的关键生产要素,如何加强对数据资源的治理利用、实现数据洞察、激活数据价值正成为亟待解决的问题。在此背景下,数据库与操作系统、云平台等国产化软件相互结合赋能成为解决问题的思路之一。近日,经过数月努力,涛思数据旗下时序数据库......
  • mysql 将数据库所有表的存储引擎修改为InnoDB
    要将现有的MySQL数据库中的所有表设置为InnoDB存储引擎,可以使用以下步骤:运行以下SQL命令,将所有表格的存储引擎设置为InnoDB:SET@DATABASE_NAME=DATABASE();SELECTCONCAT('ALTERTABLE`',table_name,'`ENGINE=InnoDB;')ASsql_statementsFROMinformation_sc......
  • Visual FoxPro(简称VFP)是一种基于对象的关系型数据库管理系统(RDBMS),以及一个用于创建数
    VisualFoxPro(简称VFP)是一种基于对象的关系型数据库管理系统(RDBMS),以及一个用于创建数据库应用程序的编程环境。它最初由FoxSoftware开发,后来被微软收购,并成为微软的产品。以下是一些关于VisualFoxPro的重要信息:数据库管理系统:VisualFoxPro是一个功能强大的数据库管理系统,具有......
  • VBA 连接SQLserver数据库抽数据
    PrivateSubmyy()'t1=TimerDimiAsLong,jAsLong,shtAsWorksheet'i,j为整数变量;sht为excel工作表对象变量,指向某一工作表,定义为Integer类型的话,变量值超过32767时会溢出'DimcnAsNewADODB.Connection'定义数据链接对象,保存连接数据库信息;请先添加ADO引用......
  • 如何避免热度数据频繁更新造成数据库死锁?
    数据库死锁对业务来说是一个非常严重的问题,它一定一定一定是代码的执行流程处理不当造成的。但是重构庞大的业务代码不是说了就能轻易做到的事情,下面给出了一些方案,由浅入深,告诉大家解决死锁问题的正确之道。死锁问题产生的原因和条件死锁问题一般发生在短时间内多个并发任务对同一......
  • 【直播预告】HarmonyOS极客松赋能直播第二期:数据库与网络连接开发
      ......