RDS 服务器最多提供 40 个连接,如以下文档
所示,我使用的是 Magento 1.9,在某些时候,我达到了最大连接数,然后网站停止服务。
你有什么推荐的方法来解决这个问题吗?
据我了解,如果我有 2 个 Web 服务器连接到 RDS 服务器..那么我应该有 2 个 RDS 连接,而不是更多。
RDS 服务器最多提供 40 个连接,如以下文档
所示,我使用的是 Magento 1.9,在某些时候,我达到了最大连接数,然后网站停止服务。
你有什么推荐的方法来解决这个问题吗?
据我了解,如果我有 2 个 Web 服务器连接到 RDS 服务器..那么我应该有 2 个 RDS 连接,而不是更多。
AWS RDS max_connections 限制变量基于实例类型,因此您可以升级 RDS 或制作更多副本。
具有 max_connections 限制的 RDS 类型:
2017-07 更新
当前 RDS MySQL 的 max_connections 设置默认为
{DBInstanceClassMemory/12582880}
,如果您使用t2.micro和 512MB RAM,则 max_connections 可能是 (512*1024*1024)/12582880 ~= 40,依此类推。每个 Web 服务器可以有许多到 RDS 的连接,这取决于您从 Web 服务器发出的 SQL 请求。
您可以
max_connections
通过更新默认参数策略或创建一个新策略来更改该值 - 我建议使用后者。max_connections
值希望这可以帮助!
Postgresql t3-instances 的实际信息(default.postgres10 参数组):
default.postgres9 和 default.postgres11 类似
登录到您的 RDS 实例(使用 MySQL 客户端)并运行以下查询:
最大同时数据库连接数因数据库引擎类型和数据库实例类的内存分配而异。最大连接数在与数据库实例关联的参数组中设置,Microsoft SQL Server 除外,它在 SQL Server Managment Studio (SSMS) 中数据库实例的服务器属性中设置。
玛丽亚数据库/MySQL
{DBInstanceClassMemory/12582880}
甲骨文
LEAST({DBInstanceClassMemory/9868951}, 20000)
PostgreSQL
LEAST({DBInstanceClassMemory/9531392}, 5000)
SQL 服务器
0 (unlimited)
https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.MaxConnections
虽然增加服务器配置的最大连接数可能会解决问题,但您应该考虑验证您的应用程序配置和实现。
我不是 Magento 方面的专家,但由于我最近在我正在处理的项目中遇到了类似的问题,我注意到我使用的框架的默认实现创建了与每次调用数据库的连接。
虽然这可能不会对某些人造成任何问题,但当您有更多访问者或一些数据库密集型任务并且可以在多个连接上运行时,防止服务器因“TOO MANY CONNECTIONS”错误而崩溃的最佳方法是实现数据库连接池。
这可以防止应用程序创建更多服务器可以处理的连接,并且不会使应用程序崩溃给用户。连接池将为访问数据库的请求保留一个队列,直到连接可用,以便它可以继续处理用户请求。
请记住,连接池在多线程场景中应该是线程安全的。
这不是最多 40 个连接,而是最多 40 个 RDS 实例。根据您的描述,您很可能只使用 1 个实例。
您可以与 RDS 服务器建立数千个连接,因为每次打开与数据库的会话时,都会创建一个新连接。您可能遇到了性能限制,应该考虑使 RDS 实例更大。
似乎是 ~45 个连接/2gb 内存
我看到了公式,检查了我的配置,默认情况下它有更复杂的 max_connections 公式,并且很难计算真正的限制,所以以简单的方式进行 - 刚刚测试。接近极限时,监控仪表板显示红线。检查下面。
db.t3.small
(2gb ram)来自监控控制台的图表,如您所见,它显示最大连接数±46,瞬间越过红线的峰值为 47现在升级到 2x 更大的实例
db.t3.medium
(4gb ram),我预计每 2gb ram 可以获得额外的 45,这似乎是真的。使用 4gb 盒子可以看到接近约 90 个连接的红线: