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

时间:2016-07-21 22:39:12

标签: amazon-web-services sqlalchemy mariadb amazon-rds

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

webapp在ELB后面有几个c3.2xlarge EC2实例(每个8个CPU),它们接收Web请求,然后查询/写入共享数据库。

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

我的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. 我是否需要了解有关数据库连接池的任何其他限制 像我这样的分布式网络应用程序的大小?

1 个答案:

答案 0 :(得分:1)

MySQL几乎可以处理任何数量的"同时"连接。但是,如果有超过几十个主动运行查询,那么可能会遇到麻烦。

在不知道您的查询正在做什么的情况下,无法确定3是限制还是300。

我建议您打开慢速日志以收集有关哪些查询是生猪的信息。经过良好调整的Web应用程序可以在3个连接上轻松存活99%。

另外1% - 好吧,可能会出现高峰。因此,3是不合理的低。