连接池中的最佳连接数

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

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

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

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

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

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

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

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

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

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

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

您可以查看以下文章:

  • FlexyPool,反应连接池

  • 专业连接池大小

  • 简单的可扩展性方程

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

从较小的数字开始,尝试达到合理数量的并发用户,然后启动它。 我认为你可能会发现你的连接池机制几乎没有像其他软件那样有助于你的可扩展性。

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

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

很难获得这方面的硬数据。 它还取决于你没有提到的一些因素 –

  • 200个并发用户,但他们的活动会产生多少数据库查询? 每页加载10个查询? 1只是在登录时查询? 等等

  • 显然查询和数据库的大小。 有些查询以毫秒为单位运行,有些查询只需几分钟。

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