连接池中的最佳连接数

时间:2009-07-30 17:25:01

标签: java mysql performance weblogic connection-pooling

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

8 个答案:

答案 0 :(得分:54)

你真的是指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个连接数并不多,因此这可能是一个很好的起始数字。

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

答案 1 :(得分:9)

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

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

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

答案 2 :(得分:9)

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

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

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

您可以查看以下文章:

答案 3 :(得分:6)

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

这是需要根据个人情况进行测试和确定的事情 - 几乎不可能为您的情况提供准确的答案 而不是非常熟悉它们。

答案 6 :(得分:1)

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

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

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

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

答案 7 :(得分:0)

根据我在高交易金融系统上的经验,如果您想处理例如每秒 1K个请求,并且您拥有32个CPU,则需要拥有{{1} }打开对数据库的连接轮询。

这是我的公式:

  

RPS / CPU_COUNT

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

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

祝你好运。