连接池中的最佳连接数

问题描述 投票:30回答:8

目前我们正在使用带有8GB内存的4个cpu windows box,并在同一个盒子上安装了MySQL 5.x.我们在我们的应用程序中使用Weblogic应用程序服务器。我们针对我们的应用程序定位了200个并发用户(显然不是针对相同的模块/屏幕)。那么我们应该在连接池中配置什么是最佳连接数(最小和最大数量)(我们使用的是weblogic AS'连接池机制)?

java mysql performance weblogic connection-pooling
8个回答
10
投票

这个问题有一个非常简单的答案:

连接池中的连接数应等于WebLogic中配置的exec线程数。

基本原理很简单:如果连接数小于线程数,则某些线程可能正在等待连接,从而使连接池成为瓶颈。因此,它至少应该等于exec线程的数量(线程池大小)。


54
投票

你真的是指200个并发用户还是只有200个登录用户?在大多数情况下,浏览器用户每秒不能执行超过1页的请求。因此,200个用户每秒转换为200个事务。对于大多数应用来说,这是一个非常高的数字

无论如何,作为一个例子,让我们每秒进行200次交易。假设每个前端(浏览器)tx需要0.5秒才能完成,0.5秒,0.25就花费在数据库中。因此,您需要在WebLogic thead池中使用0.5 * 200或100个连接,并在数据库连接池中使用0.25 * 200 = 50个连接。

为了安全起见,我将最大线程池大小设置为比预期允许加载峰值大至少25%。最小值可以是最大值的一小部分,但权衡是某些用户可能需要更长的时间,因为必须创建新的连接。在这种情况下,对于DB来说,50-100个连接并不是那么多,因此这可能是一个很好的起始数字。

请注意,要确定平均事务响应时间以及平均数据库查询时间,您将不得不进行性能测试,因为加载时间可能不会是您单独查看的时间用户。


9
投票

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

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

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

您可以查看以下文章:


6
投票

您应该分析不同的预期工作流程以找出答案。理想情况下,您的连接池还将根据最近的使用情况动态调整实时连接的数量,因为加载是目标地理区域中当前时间的函数。

从较小的数字开始,尝试达到合理数量的并发用户,然后启动它。我认为您可能会发现您的连接池机制与其他软件的可扩展性差不多。


2
投票

连接池应该能够根据实际需要增长和眨眼。通过记录语句或通过JMX监视记录在运行系统上进行分析所需的数字。考虑设置警报,例如“检测到峰值:超过X个新条目必须在Y秒内分配”,“连接超出池超过X秒”,这将允许您在性能问题得到关注之前注意它们真正的问题。


1
投票

这是需要在个人基础上进行测试和确定的事情 - 如果不熟悉它们,几乎不可能为您的情况提供准确的答案。


1
投票

为此获取硬数据很困难。这也取决于你没有提到的一些因素 -

  • 200个并发用户,但他们的活动会产生多少数据库查询?每页加载10个查询? 1登录时只查询?等等
  • 显然查询和数据库的大小。有些查询以毫秒为单位运行,有些查询只需几分钟。

您可以使用“show processlist”监视mysql以查看当前活动的查询。这可以让您更好地了解在峰值负载下数据库中实际运行的活动量。


0
投票

根据我在高交易金融系统上的经验,如果你想要处理例如每秒1K的请求,并且你有The simple scalability equation CPU,你需要让32打开连接轮询到你的数据库。

这是我的公式:

RPS / CPU_COUNT

如果大多数情况下,您的数据库引擎即使数量很少也能够处理您的请求,但如果数量很少,您的连接将处于等待模式。

我认为提到您的数据库应该能够处理这些事务(基于您的磁盘速度,数据库配置和服务器功率)非常重要。

祝好运。

© www.soinside.com 2019 - 2024. All rights reserved.