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

我正在开发基于开源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)?

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

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

你可以设置

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

我不熟悉microsoft sql server,但我认为它的最大池限制为100

使用这个池大小的Tomcat将没问题。

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

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

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

您可以查看以下文章:

  • FlexyPool,反应连接池

  • 专业连接池大小

  • 简单的可扩展性方程

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

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

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

CPU,内存,磁盘,网络,复杂的数据库查询,高并发性……很多这些?

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

Interesting Posts