目前我们使用的是 4 个 CPU 的 Windows 机器,带有 8GB RAM,并在同一机器上安装了 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个连接数并不多,因此这可能是一个很好的起始数字。

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

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

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

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

您可以查看以下文章:

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

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

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

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

很难获得这方面的硬数据。它还取决于您未提及的许多因素 -

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

  • 查询和数据库的大小很明显。有些查询在几毫秒内运行,有些则在几分钟内运行。

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

根据我在高交易金融系统上的经验,如果你想处理例如每秒1K请求,并且你有 32 CPU,你需要<代码> 1000/32 打开连接轮询到您的数据库。

这是我的公式:

  

RPS / CPU_COUNT

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

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

祝你好运。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top