当前位置: 首页 > 滚动 > > 内容页

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

发布时间:2023-06-26 19:23:51 来源:博客园

数据库连接池是一种用于管理和维护数据库连接的技术,不同类型的数据库连接池具体的配置参数和调优方法也是有所不同的。下面分别举例 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. 监控和统计:要及时监控和统计数据库连接池的状态和性能指标,以便进行及时调整和优化。

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

推荐阅读