【问题标题】:Load Testing SQL Alchemy: "TimeoutError: QueuePool limit of size 3 overflow 0 reached, connection timed out, timeout 30"负载测试 SQL Alchemy:“TimeoutError:QueuePool 限制大小为 3 溢出 0,连接超时,超时 30”
【发布时间】:2016-11-25 17:03:17
【问题描述】:

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

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

我使用的数据库是 RDS 实例类型:db.m4.4xlarge。 它正在运行 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. 我是否需要了解有关数据库连接池的任何其他限制 像我这样的分布式网络应用程序的大小?

【问题讨论】:

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


    【解决方案1】:

    MySQL 几乎可以处理任意数量的“同时”连接。但如果有超过几十个主动在运行查询,可能会出现问题。

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-09-29
      • 2020-02-20
      • 1970-01-01
      • 2014-09-17
      • 2016-11-12
      • 2016-12-13
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多