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

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

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

posted @ 2023-06-26 19:28  查拉图斯特拉面条  阅读(1332)  评论(0编辑  收藏  举报