决定数据库连接池大小的思考

时间:2012-01-06 04:41:05

标签: java sql-server database-connection connection-pooling flexy-pool

我正在研究基于开源java的应用程序,即xwiki。 insie hibernate.cfg.xml我可以看到参数connection.pool_size和的值 statement_cache.siz为2(每个)。我的应用程序将在最多时间内拥有100个用户。现在我的问题应该是什么  这是理想的连接池大小。对我来说,2号看起来很少。如果100个用户一次连接98个用户必须等待grtting  连接发布了?在我的情况下,我应该将连接池大小保持为100吗?

我正在使用microsoft sql server。

除此之外,最大连接池大小也有限制。它依赖于webserver(在我的情况下是tomcat)还是数据存储供应商(ms sql server)?

4 个答案:

答案 0 :(得分:8)

调整连接池的大小并不是一件容易的事。你基本上需要:

  • 用于调查连接使用情况的指标
  • 无连接时的故障转移机制

FlexyPool旨在帮助您确定正确的连接池大小。

您可以查看以下文章:

答案 1 :(得分:7)

如果典型请求花50%的时间进行计算,50%花费数据库连接,那么您的池中可能只需要50个连接。当然,您的应用程序应尽早释放数据库连接。

一般来说,保持连接对于数据库来说并不昂贵(而创建新的连接则相当昂贵)。保持足够大的尺寸应该没问题。

您可以设置

  • 最大池大小为100
  • 首选池大小为50
  • 和池空连接的空闲超时时间为5分钟。

我对microsoft sql server不熟悉,但我认为它是max pool limit is 100

使用此池数量时,Tomcat可以正常使用。

答案 2 :(得分:2)

您应该评估应用程序的并发要求,数据库操作时间以及服务器(或数据库供应商)可以支持的连接数。

所以100个用户并不意味着您需要一个大小为100的连接池。

答案 3 :(得分:2)

请注意,如果未使用,池可能会耗费内存。 池配置在很大程度上取决于瓶颈所在:

CPU,内存,磁盘,网络,复杂的数据库查询,高并发性,......其中很多?

默认池大小通常为5到10。 首先确保您遇到数据库问题。 在人工负载下尝试极端情况,如2或30,看看它是如何表现的。 我认为@ vlad-mihalcea提供的链接非常有趣。