23

我正在开发基于开源 Java 的应用程序,即 xwiki。Insie hibernate.cfg.xml 我可以看到参数 connection.pool_size 和 statement_cache.siz 的值为 2(对于每个)。我的应用程序在某个时间点的最大负载为 100 个用户。现在我的问题是什么应该是理想的连接池大小。对我来说,2 号看起来非常小。如果 100 个用户一次连接 98 个用户必须等待 grtting 连接释放?在我的情况下,我应该将连接池大小保持为 100 吗?

我正在使用微软 sql 服务器。

除此之外,最大连接池大小有限制。它是否依赖于网络服务器(在我的例子中是 tomcat)或数据存储供应商(ms sql server)?

4

4 回答 4

17

调整连接池的大小并非易事。你基本上需要:

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

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

于 2014-05-08T09:00:45.900 回答
11

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

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

你可以设置

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

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

Tomcat 可以使用这个数量的池大小。

于 2012-01-06T06:10:33.727 回答
3

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

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

于 2012-01-06T06:19:52.207 回答
3

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

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

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

于 2017-08-23T13:16:11.243 回答