我正在使用Magento 1.9,在某些情况下,我达到了最大连接数,则网站不可用。
您有任何建议吗?解决这个问题的方法?
据我了解,如果我有2个Web服务器连接到RDS服务器..那么我应该有2个RDS连接,而不是更多。
#1 楼
AWS RDS max_connections限制变量基于实例类型,因此您可以升级RDS或制作更多副本。具有max_connections限制的RDS类型:
t2 .micro 66
t2.small 150
m3.medium 296
t2.medium 312
m3.large 609
t2.large 648
m4.large 648
m3.xlarge 1237
r3.large 1258
m4.xlarge 1320
m2.xlarge 1412
m3.2xlarge 2492
r3.xlarge 2540
通过max_connections在2015年AWS RDS MySQL实例大小上引用
更新2017-07
当前的RDS MySQL max_connections设置是
{DBInstanceClassMemory/12582880}
的默认设置,如果您使用t2.micro和512MB RAM,则max_connections可能是(512 * 1024 * 1024)/ 12582880〜= 40,依此类推。每个Web服务器可以与RDS建立许多连接,这取决于您从Web服务器发出的SQL请求。
评论
我检查了RDS参数组,{DBInstanceClassMemory / 12582880}默认使用max_connections,因此当您将t2.micro与512MB RAM一起使用时,max_connections可能是(512 * 1024 * 1024)/ 12582880 = 40.69,这可以解释您的40个最大值连接。
–蔡力强
17年7月17日在7:59
您可以通过使用命令显示变量'max_connections';查询RDS MySQL来检查该值。
–蔡力强
17年7月17日14:00
您可以创建一个新的参数组,并将max_connections的值更改为所需的值。这将是您的RDS实例的新连接限制。
–反斜杠N
19 Mar 26 '19在8:46
RDS max_connection已更改为DBInstanceClassMemory / 9531392,例如-对于具有4GB内存的t2.medium。是-4 * 1024 * 1024 * 1024/9531392 = 450
– Gal Bracha
19年4月15日在5:35
这个答案将在2019年成立。您随时可以在SHOW VARIABLES WHERE Variable_name ='max_connections'中检查自己
–戴夫·斯坦
19年4月4日在15:06
#2 楼
您可以通过更新默认参数策略或创建新策略来更改max_connections
值-我建议您使用后者。转到RDS
参数组
创建新的参数组(AWS将保留所有默认设置)
搜索
max_connections
值更改值以使用
转到RDS实例并修改
选择新参数组已创建并重新启动实例,或在下一个维护窗口期间让AWS重新启动实例
希望有帮助!
评论
<3这应该是公认的答案
–bbozo
18年4月5日在15:11
即使我将max_connections设置为1000,rds在微型实例上仍然只允许100个最大连接
–米格尔·莫塔(Miguel Mota)
18年4月12日在19:14
@MiguelMota,这可能是因为mysqlx_max_connections设置为100并且不可变。如果我错了,请纠正我。
–AndréYuhai
20年6月26日在17:12
#3 楼
登录到您的RDS实例(使用MySQL客户端)并运行以下查询:SHOW VARIABLES LIKE 'max_connections';
#4 楼
Postgresql t3-instances的实际信息(default.postgres10参数组):db.t3.medium-450个最大连接数
db.t3.large-901个最大连接数
db.t3.xlarge-1802个最大连接数
db.t3.2xlarge-3604最大连接数
与default.postgres9和default.postgres11类似。
#5 楼
数据库并发连接的最大数量因数据库引擎类型和数据库实例类的内存分配而异。在与数据库实例关联的参数组中设置最大连接数,但Microsoft SQL Server除外,在Microsoft SQL Server中,最大连接数是在SQL Server Managment Studio(SSMS)中数据库实例的服务器属性中设置的。MariaDB / MySQL
{DBInstanceClassMemory/12582880}
Oracle
LEAST({DBInstanceClassMemory/9868951}, 20000)
PostgreSQL
LEAST({DBInstanceClassMemory/9531392}, 5000)
SQL Server
0 (unlimited)
https:// docs .aws.amazon.com / AmazonRDS / latest / UserGuide / CHAP_Limits.html#RDS_Limits.MaxConnections
#6 楼
虽然增加服务器配置上的最大连接数可能会解决此问题,但您应该考虑验证您的应用程序配置和实现。我不是Magento的专家,但是最近我遇到了类似的问题在我正在进行的一个项目中,我注意到我使用的框架的默认实现会在每次调用数据库时创建一个连接。
在您一开始可能不会造成任何问题具有更多访问者或一些数据库密集型任务,并且可以在多个连接上运行,防止服务器因“ TOO MANY CONNECTIONS”错误而崩溃的最佳方法是实施数据库连接池。
这可以防止应用程序创建更多服务器可以处理的连接,并且不会使应用程序崩溃。连接池将为访问数据库的请求保留一个队列,直到连接可用为止,以便它可以继续处理用户请求。
请记住,连接池应该是线程安全的,多线程方案。
#7 楼
最多连接40个连接,最多RDS实例40个。根据您的描述,您很可能仅使用1个实例。您可以与RDS服务器建立数千个连接,因为每次与数据库打开会话时,都会创建一个新连接。您可能会遇到性能限制,应该考虑使RDS实例更大。
评论
感谢@jason,我得到以下信息:达到40个连接时,RDS直到其他连接关闭后才响应。我们有r3.xlarge RDS实例。以下是此屏幕截图:drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk / ...我们的CPU闲置,连接数量很多
– Alaa Badran
17年7月17日在5:41
这是联系,不是其他
–奥兰多
18年1月6日在22:28
评论
“据我了解,如果我有2个Web服务器连接到RDS服务器。那么我应该有2个RDS连接,而不是更多。”这是一个错误的理解。每个工作进程或线程通常只有1个连接。谢谢@ Michael-sqlbot ..是的,我对此误解了,但我想确定一下。但是,为什么当我们有40个连接到RDS时,它拒绝其他连接并且在其他连接关闭之前无法访问?
这是设计使然,来自max_connections参数。对于大多数工作负载,您应该可以安全地增加它,因为它是一个安全的默认值...但是您需要调查造成这些峰值的原因。