AWS RDS连接限制


45

RDS服务器最多提供40个连接,如以下文档中所示,
我正在使用Magento 1.9,在某些时候,我达到了最大连接数,则网站不可用。
您是否有解决此问题的建议方法?

据我了解,如果我有2个Web服务器连接到RDS服务器..则我应该有2个RDS连接,而不是更多。


2
“据我了解,如果我有2个Web服务器连接到RDS服务器。那么我应该有2个RDS连接,而不是更多。” 这是一个错误的理解。每个工作进程或线程通常只有1个连接。
Michael-sqlbot

谢谢@ Michael-sqlbot ..是的,我对此误解了,但我想确定一下。但是,为什么当我们有40个连接到RDS时,它拒绝其他连接并且在其他连接关闭之前无法访问?
Alaa Badran

这是根据max_connections参数设计的。对于大多数工作负载,您应该能够安全地增加它,因为它是一个安全的保守默认值...但是您需要调查造成这些峰值的原因。
Michael-sqlbot

Answers:


65

AWS RDS max_connections限制变量基于实例类型,因此您可以升级RDS或制作更多副本。

具有max_connections限制的RDS类型:

  • t2.micro 66
  • t2。小150
  • m3.medium 296
  • t2.312
  • m3。大609
  • t2。大648
  • m4.large 648
  • m3.xlarge 1237
  • r3.large 1258
  • m4.xlarge 1320
  • m2.xlarge 1412
  • m3.2x大2492
  • r3.xlarge 2540

通过max_connections在2015年的AWS RDS MySQL实例大小上进行引用

更新2017-07

当前的RDS MySQL max_connections设置默认为{DBInstanceClassMemory/12582880},如果您使用带有512MB RAM的t2.micro,则max_connections可以是(512 * 1024 * 1024)/ 12582880〜= 40,依此类推。


每个Web服务器可以与RDS建立许多连接,这取决于您从Web服务器发出的SQL请求。


我知道这一点,但是当达到40个连接时,服务器没有响应?检查:drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/...
阿拉·巴德兰

1
我检查了RDS参数组,max_connections默认为{DBInstanceClassMemory/12582880},因此当您将t2.micro与512MB RAM一起使用时,max_connections (512*1024*1024)/12582880 = 40.69可以解释您的40个最大连接。

2
您可以通过使用command查询该RDS MySQL来检查该值show variables like 'max_connections';
蔡仔

1
您可以创建一个新parameter group值并将其值更改max_connections 为所需的值。这将是您的RDS实例的新连接限制。
反斜杠N

1
这个答案将在2019年成立。您可以随时进行检查SHOW VARIABLES WHERE Variable_name='max_connections'
Dave Stein

30

您可以max_connections通过更新默认参数策略或创建新参数策略来更改值-我建议您使用后者。

  • 转到RDS
  • 参数组
  • 创建一个新的参数组(AWS将所有内容保留为默认值)
  • 寻找max_connections价值
  • 更改要使用的值
  • 转到RDS实例并进行修改
  • 选择创建的新参数组并重新启动实例,或在下一个维护窗口期间让AWS重新启动它

希望这可以帮助!


2
<3这应该是公认的答案
bbozo

2
即使我将max_connections设置为1000,但rds仍然仅在微型实例上允许100个最大连接
Miguel Mota,

1

虽然增加服务器配置上的最大连接数可能会解决此问题,但您应考虑验证您的应用程序配置和实现。

我不是Magento的专家,但是由于我最近在一个正在处理的项目中遇到类似的问题,因此我注意到我使用的框架的默认实现会在每次调用数据库时创建一个连接。

虽然这可能不会造成任何问题,但是当您有更多的访问者或某些数据库密集型任务并且可以在多个连接上运行时,防止服务器因“ TOO MANY CONNECTIONS”错误而崩溃的最佳方法是实现数据库连接池。

这样可以防止应用程序创建服务器可以处理的更多连接,并且不会使应用程序崩溃。连接池将为访问数据库的请求保留队列,直到连接可用为止,以便它可以继续处理用户请求。

请记住,在多线程方案中,连接池应该是线程安全的。


1

登录到您的RDS实例(使用MySQL客户端)并运行以下查询:

SHOW VARIABLES LIKE 'max_connections';

1

Postgresql t3-instances的实际信息(default.postgres10参数组):

  • db.t3.micro-112个max_connections
  • db.t3.small-225个max_connections
  • db.t3.medium-450个max_connections
  • db.t3.large-901个max_connections
  • db.t3.xlarge-1802 max_connections
  • db.t3.2xlarge-3604 max_connections

与default.postgres9和default.postgres11类似


0

最多连接40个连接,最多RDS实例40个。根据您的描述,您很可能仅使用1个实例。

您可以与RDS服务器建立数千个连接,因为每次与数据库打开会话时,都会创建一个新连接。您可能会遇到性能限制,应该考虑使RDS实例更大。


感谢@jason,我得到以下信息:达到40个连接时,RDS在其他连接关闭之前不会响应。我们有r3.xlarge RDS实例。以下是此屏幕截图:drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/… 我们有大量连接的空闲CPU
Alaa Badran

这是联系,而不是其他事情
奥兰多
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.