我之前写过连接池的好处和为什么监控至关重要两篇文章。这篇文章将讨论如何使用Flexy Pool为你的连接池找到合适的大小。
了解你的连接池
第一步是了解你的连接池设置,我目前开发的程序使用XA事务, 因此我使用Bitronix 事务管理器, 它自带连接池解决方案。
根据Bitronix 连接池文档 我们需要使用以下配置项:
- minPoolSize: 连接池中保留的最小连接数。
- maxPoolSize: 连接池中保留的最大连接数。
- maxIdleTime: 最大空闲时间。
- acquisitionTimeout: 请求超时时间。30秒的默认值远远超出了我们的QoS。
配置 Flexy Pool
Flexy Pool 自带一个默认的度量指标设置,它建立在Coda Hale Metrics之上并提供两种报告机制:
一个企业级的系统必须使用中央监控工具,比如Ganglia 和 Graphite。而通过Flexy Pool 使用多种报告机制是相当容易的。我们的示例将导出报告到CSV文件,你可以自定义默认的度量指标设置。
初始化设置
我们把maxOverflow和retryAttempts的值设置得足够大,让Flexy Pool找到合适的连接池大小:
名称 | 值 | 描述 |
minPoolSize | 0 | 连接池启动时最小连接数为0 |
maxPoolSize | 1 | 连接池启动时最大连接数为1 |
acquisitionTimeout | 1 | 一个连接请求的超时时间为1秒 |
maxOverflow | 9 | 最大连接数能增长到10 (初始的 maxPoolSize + maxOverflow) |
retryAttempts | 30 | 如果连接池中保留的最大连接数为10并且没有可用的连接, 一个连接请求将会重试30次. |
度量指标耗时
我们的程序是一个批量处理器,通过大数据可以得到以下性能指标:
1. concurrentConnectionCount
2. concurrentConnectionRequestCount
3. maxPoolSizeHistogram
4. connectionAcquireMillis
5. retryAttemptsHistogram
6. overallConnectionAcquireMillis
7. connectionLeaseMillis
在分析了各项指标之后,我们可以得到以下结论:
- 最大连接数应该是8。
- 对于这个最大连接数重试次数为0。
- 在连接池保留的最大连接数达到最大值以后,获取连接的时间趋于稳定。
- 当租约时间达到顶峰50秒的时候,连接数从7增长到8,因此降低租约时间可以帮助我们减少连接数。
如果数据库最大连接数是100,那我们可以并发运行12个程序。
接近目标
假设我们需要运行19个程序而不是12个,这意味着连接数最多是5。降低连接数将会增加连接请求争用和潜在的重试次数。
这次我们把maxOverflow改为4,其它设置不变:
名称 | 值 | 描述 |
maxOverflow | 4 | 最大连接数能增长到10 (初始的 maxPoolSize + maxOverflow) |
度量指标重载
以下是新的度量指标:
1. concurrentConnectionCount
2. concurrentConnectionRequestCount
3. maxPoolSizeHistogram
4. connectionAcquireMillis
5. retryAttemptsHistogram
6. overallConnectionAcquireMillis
7. connectionLeaseMillis
分析这些指标,我们可以得出结论:
- 连接池保留的最大连接数为5时,重试连接次数不会超过3。
- 从整体连接获取时间的变化可以反映出重试次数变多了。
- 连接的租约时间峰值没多大变化,即便这次它大约是35秒。
结论
即便有意外情况发生,Flexy Pool 提供的故障转移机制也有助于连接池调整优化。
当重试次数达到阀值时就会触发警报,让我们能够尽快介入。
相关推荐
这份名为“连接池大小调优Java开发Java经验技巧共8页.pdf”的资料可能详细阐述了以下几点关键知识点: 1. **连接池原理**:连接池的基本概念,包括如何创建、管理和复用数据库连接,减少每次建立和关闭连接的开销。...
- 根据应用的并发量和数据库服务器的承受能力合理设置连接池大小。 - 定期检查并更新连接池配置,以适应系统负载的变化。 - 使用合适的健康检查机制,确保连接有效性。 - 开启连接池的日志,以便分析和调优。 6...
数据库连接池是现代应用程序开发中的重要组成部分,尤其...在实际开发中,我们还需要考虑连接池的监控和调优,比如监控连接池的使用情况,根据性能指标调整参数,以及处理异常和错误情况,以保证系统的稳定性和高效性。
- 设置合适的连接池大小:太小可能导致连接不足,太大则可能浪费系统资源。 - 超时策略:设置超时机制,避免因长时间未使用的连接占用资源。 - 监控和日志:监控连接池的使用情况,记录异常,便于调试和优化。 总的...
- 调整连接池大小:根据应用程序的并发用户数和数据库处理能力,合理设置最大和最小连接数,避免资源浪费和过度竞争。 - 连接超时:设置适当的连接超时,防止因长时间未使用的连接占用资源。 - 错误处理:确保应用...
* 缓冲池的_pagesize:缓冲池的_pagesize决定了缓冲池的大小,缓冲池的_pagesize太小,会导致缓冲池的大小太小,缓冲池的_pagesize太大,会导致缓冲池的大小太大。 此外,索引调优也非常重要,索引可以提高查询性能...
DB2 缓冲池和索引调优的方法 DB2 缓冲池和索引调优是 DB2数据库性能优化的关键。缓冲池是 DB2 中的一块区域,用于存放频繁访问的数据,以提高数据库的性能。索引是 DB2 中的一种数据结构,用于快速定位数据。缓冲池...
同时,为了保证系统的稳定性和可用性,定期对连接池进行监控和调优也至关重要。 总的来说,MySQL数据连接池是提高系统性能、优化数据库访问的关键技术之一,它通过有效的管理数据库连接,实现了资源的高效利用,...
1. 调整连接池参数:根据应用的并发量和数据库性能调整连接池大小,以避免资源浪费或连接不足的情况。 2. 使用连接池健康检查:定期检查连接的有效性,确保连接池中的连接可以正常工作。 3. 释放资源:在应用结束时...
- 可以通过配置参数调整连接池大小,适应不同负载需求。 2. **服务器自带的连接池** - 大型Web应用服务器如WebLogic和WebSphere提供了内置的连接池功能,但通常需要特定的API或配置进行管理。 **连接池的关键...
5. 配置灵活:支持多种数据库类型,允许调整连接池大小、超时设置等参数。 三、阿里Druid连接池 阿里Druid是一个全面的数据库连接池组件,它不仅提供了基础的连接池功能,还有许多独特的特性,如: 1. SQL解析:...
数据底层连接池是数据库操作中的一个重要概念,它在IT领域中扮演着优化数据库访问效率的角色。连接池,也称为数据库连接...在实际项目中,开发者应根据应用的特性和需求选择合适的连接池实现,并进行合理的配置和调优。
1. **初始化连接池**:设置连接池的大小,即最大同时连接数,以及其他的连接参数,如超时时间。 2. **获取连接**:当需要执行数据库操作时,从连接池中借用一个连接,而不是创建新的连接。 3. **释放连接**:完成...
- 管理与调整:连接池负责监控所有连接的状态,确保其有效性,并在需要时自动扩展或收缩连接池大小。 2. **主要功能**: - **连接复用**:减少连接创建和释放的时间消耗。 - **连接管理**:监控连接状态,确保...
1. 调整连接池大小:根据服务器性能和应用需求,适当调整`minimumIdle`和`maximumPoolSize`,避免过多连接占用资源或连接不足导致请求阻塞。 2. 设置合理的超时时间:`connectionTimeout`避免因长时间等待连接而...
`设置了连接池的最大大小为100。`using`语句确保在操作完成后,即使出现异常,也会正确关闭和返回连接。 使用数据库连接池有以下几个关键点需要注意: 1. **连接字符串**: 连接字符串是连接池识别连接的关键,如果...
10. **最佳实践**:选择合适的连接池大小是关键,过大可能导致资源浪费,过小则可能引起连接不够用的问题。实际使用中应根据系统负载和数据库性能调整连接池配置。 总之,这份源码提供了一个学习数据库连接池实现的...
这些连接池库提供了一套完善的API和配置选项,使得开发者能够根据实际需求调整连接池的大小、超时时间、空闲检查频率等参数。 1. DBCP(BasicDataSource):Apache的基础数据源,它是Jakarta Commons Pool和Jakarta...
6. **连接池管理**:DBCP提供了监控和调整连接池大小的功能,比如当连接池耗尽时,可以根据预设策略自动扩展;当空闲连接过多时,可以自动回收。 7. **优点**:使用数据库连接池可以提高性能,因为创建和销毁连接是...