目前我们正在使用带有8gb RAM的4个cpu windows box,并在同一个盒子上安装了MySQL 5.x.我们在我们的应用程序中使用Weblogic应用程序服务器。我们针对我们的应用程序定位了200个并发用户(显然不是针对相同的模块/屏幕)。那么我们应该在连接池中配置什么是最佳连接数(最小和最大数量)(我们使用的是weblogic AS'连接池机制)?
答案 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)
答案 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
在大多数情况下,即使数量少得多,数据库引擎也能够处理您的请求,但是如果数量少,则连接将处于等待模式。
我认为提及数据库应该能够处理这些事务(基于磁盘速度,数据库配置和服务器能力)非常重要。
祝你好运。