负载测试 SQL Alchemy:“TimeoutError:达到 QueuePool 大小限制 3 溢出 0,连接超时,超时 30”

2024-05-05

我有一个在 AWS 中运行的基于 SQL-Alchemy 的 Web 应用程序。

该网络应用程序有几个c3.2xlargeELB 后面的 EC2 实例(每个 8 个 CPU)接收 Web 请求,然后查询/写入共享数据库。

我使用的数据库是 RDS 实例类型:db.m4.4xlarge。 它正在运行 MariaDB 10.0.17

My SQL Alchemy 设置如下:

SQLALCHEMY_POOL_SIZE = 3
SQLALCHEMY_MAX_OVERFLOW = 0

在重负载下,我的应用程序开始抛出以下错误:

TimeoutError: QueuePool limit of size 3 overflow 0 reached, connection timed out, timeout 30

当我将 SQLALCHEMY_POOL_SIZE 从 3 增加到 20 时,相同负载测试的错误就会消失。这是我的问题:

  1. 我的数据库总共可以处理多少个并发连接?
  2. 假设这样公平吗?Number of Number of EC2 instances * Number of Cores Per instance * SQLALCHEMY_POOL_SIZE可以达到但不能超过问题#1 的答案?
  3. 我是否需要了解有关数据库连接池的任何其他约束 像我这样的分布式网络应用程序的大小?

MySQL 几乎可以处理任意数量的“同时”连接。但如果超过几十个actively运行查询,有may有麻烦了。

如果不知道您的查询在做什么,就无法判断 3 是限制还是 300。

我建议您打开慢日志来收集有关哪些查询是“霸占”的信息。一个经过精心调优的 Web 应用程序可以在 3 个连接上轻松存活 99%。

另外 1%——嗯,可能会出现峰值。因此,3 是不合理的低。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

负载测试 SQL Alchemy:“TimeoutError:达到 QueuePool 大小限制 3 溢出 0,连接超时,超时 30” 的相关文章

随机推荐