我正在开发基于java的开源应用程序,即xwiki。在hibernate.cfg.xml中,我可以看到参数connection.pool_size和statement_cache.size为2(每个)。我的应用程序在某个时间点的最大负载将达到100个用户。现在我的问题是,理想的连接池大小应该是多少。对我来说,2号看起来很小。如果一次有100个用户连接,98个用户必须等待连接释放?在我的情况下,我应该将连接池大小保持为100吗?
我使用的是microsoftsqlserver。
除此之外,最大连接池大小也有限制。它依赖于Web服务器(在我的例子中是tomcat)还是数据存储供应商(ms-sql服务器)?
确定连接池的大小不是一件小事
- 调查连接使用情况的指标
- 无可用连接时的故障切换机制
FlexyPool旨在帮助您确定正确的连接池大小。
如果一个典型的请求花费50%的时间进行计算,50%的时间用于数据库连接,那么您的池中可能只需要50个连接。当然,您的应用程序应该尽早释放数据库连接。
一般来说,对于数据库来说,保持连接并不昂贵(而创建新连接则相当昂贵)。保持足够高的尺寸应该没有问题。
您可以设置
- 最大池大小为100
- 首选池大小为50
- 并且对于池连接,空闲超时为5分钟
我不熟悉微软的sql server,但我认为它的最大池限制是100
Tomcat可以处理这个数量的池大小。
您应该评估应用程序的并发需求、数据库操作时间,以及服务器(或数据库供应商)可以支持的连接数量。
因此,100个用户并不意味着你需要一个大小为100的连接池。
请注意,如果池未使用,可能会白白消耗内存。池配置在很大程度上取决于瓶颈所在:
CPU、内存、磁盘、网络、复杂的数据库查询、高并发、。。。很多?
默认池大小通常为5到10。首先确保数据库有问题。在人为负载下尝试2或30这样的极端情况,看看它的表现如何。我认为@vladmihalcea提供的链接非常有趣。