我有一个在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时,错误会因相同的负载测试而消失。以下是我的问题:
Number of Number of EC2 instances * Number of Cores Per instance * SQLALCHEMY_POOL_SIZE
可以达到但不能超过问题#1的答案,这是公平的吗?答案 0 :(得分:1)
MySQL几乎可以处理任何数量的"同时"连接。但是,如果有超过几十个主动运行查询,那么可能会遇到麻烦。
在不知道您的查询正在做什么的情况下,无法确定3是限制还是300。
我建议您打开慢速日志以收集有关哪些查询是生猪的信息。经过良好调整的Web应用程序可以在3个连接上轻松存活99%。
另外1% - 好吧,可能会出现高峰。因此,3是不合理的低。