我有一个在 AWS 中运行的基于 SQL-Alchemy 的 Web 应用程序。
该网络应用程序有几个c3.2xlarge
ELB 后面的 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 时,相同负载测试的错误就会消失。这是我的问题:
- 我的数据库总共可以处理多少个并发连接?
- 假设这样公平吗?
Number of Number of EC2 instances * Number of Cores Per instance * SQLALCHEMY_POOL_SIZE
可以达到但不能超过问题#1 的答案?
- 我是否需要了解有关数据库连接池的任何其他约束
像我这样的分布式网络应用程序的大小?
MySQL 几乎可以处理任意数量的“同时”连接。但如果超过几十个actively运行查询,有may有麻烦了。
如果不知道您的查询在做什么,就无法判断 3 是限制还是 300。
我建议您打开慢日志来收集有关哪些查询是“霸占”的信息。一个经过精心调优的 Web 应用程序可以在 3 个连接上轻松存活 99%。
另外 1%——嗯,可能会出现峰值。因此,3 是不合理的低。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)