AWS RDS 연결 제한


45

RDS 서버는 Magento 1.9를 사용 하는 다음 설명서 와 같이 최대 40 개의 연결을 제공
하며 어떤 시점에서는 최대 수에 도달하면 웹 사이트가 작동하지 않습니다.
이 문제를 해결하기 위해 권장되는 방법이 있습니까?

내 이해에서 RDS 서버에 2 개의 웹 서버 연결이 있으면 2 개 이상의 RDS 연결이 있어야합니다.


2
"내 이해에서 RDS 서버에 2 개의 웹 서버 연결이있는 경우 2 개 이상의 RDS 연결이 있어야합니다." 그것은 잘못된 이해입니다. 일반적으로 작업자 프로세스 또는 스레드 당 1 개의 연결입니다.
Michael-sqlbot

감사합니다 @ Michael-sqlbot .. 예 나는 이것을 오해하지만, 확인하고 싶었다. 그러나 왜 우리가 40 개의 연결을 RDS에 연결할 때 다른 연결을 거부하고 다른 연결이 닫힐 때까지 연결할 수 없습니까?
Alaa Badran

그것은 max_connections매개 변수 에서 의도적으로 설계된 것 입니다. 대부분의 워크로드에서는 안전하게 보수적 인 기본값이기 때문에 안전하게 증가시킬 수 있어야하지만 이러한 스파이크의 원인을 조사하고 싶을 것입니다.
Michael-sqlbot

답변:


65

AWS RDS max_connections 제한 변수는 인스턴스 유형을 기반으로하므로 RDS를 업그레이드하거나 더 많은 복제본을 만들 수 있습니다.

max_connections 제한이있는 RDS 유형 :

  • t2. 마이크로 66
  • t2. 소형 150
  • m3. 매체 296
  • t2. 중간 312
  • m3. 대형 609
  • t2. 큰 648
  • m4. 대형 648
  • m3.xlarge 1237
  • r3. 대형 1258
  • m4.xlarge 1320
  • m2.xlarge 1412
  • m3.2xlarge 2492
  • r3.xlarge 2540

2015 년 AWS RDS MySQL 인스턴스 크기 에서 max_connections로 참조

2017-07 업데이트

현재 RDS MySQL max_connections 설정은 기본적으로 {DBInstanceClassMemory/12582880}이며, 512MB RAM과 함께 t2.micro 를 사용하는 경우 max_connections는 (512 * 1024 * 1024) / 12582880 ~ = 40 등이 될 수 있습니다.


각 웹 서버에는 RDS에 대한 많은 연결이있을 수 있으며 이는 웹 서버의 SQL 요청에 따라 다릅니다.


나는 이것을 알고 있지만 40 연결에 도달하면 서버가 응답하지 않습니까? 이것을 확인하십시오 : drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/…
Alaa Badran

1
RDS 매개 변수 그룹을 확인하면 max_connections는 기본적으로로 설정되어 {DBInstanceClassMemory/12582880}있으므로 512MB RAM과 함께 t2.micro를 사용하면 max_connections가 (512*1024*1024)/12582880 = 40.69최대 40 개의 연결을 설명 할 수 있습니다 .
Nick Tsai

2
command를 사용하여 해당 RDS MySQL을 쿼리하여 값을 확인할 수 있습니다 show variables like 'max_connections';.
Nick Tsai

1
새 값을 작성하고 원하는 값으로 parameter group값을 변경할 수 있습니다 max_connections. 이것이 RDS 인스턴스의 새로운 연결 제한입니다.
backslashN

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

MySQL 클라이언트를 사용하여 RDS 인스턴스에 로그인하고 다음 쿼리를 실행하십시오.

SHOW VARIABLES LIKE 'max_connections';

1

PostgreSQL t3 인스턴스에 대한 실제 정보 (default.postgres10 파라미터 그룹) :

  • db.t3.micro-112 최대 연결
  • db.t3.small-225 max_connections
  • db.t3.medium-450 최대 연결
  • db.t3.large-901 max_connections
  • db.t3.xlarge-1802 max_connections
  • db.t3.2xlarge-3604 max_connections

default.postgres9 및 default.postgres11과 유사합니다.


0

최대 40 개의 연결이 아니며 최대 40 개의 RDS 인스턴스입니다. 설명에 따라 1 개의 인스턴스 만 사용하고있을 가능성이 큽니다.

데이터베이스와의 세션이 열릴 때마다 새 연결이 작성되므로 RDS 서버에 수천 개의 연결이있을 수 있습니다. 성능 제한이있을 수 있으며 RDS 인스턴스를 더 크게 만들어야합니다.


감사합니다 @jason 다음 정보가 있습니다. 40 연결에 도달하면 다른 연결이 닫힐 때까지 RDS가 응답하지 않습니다. r3.xlarge RDS 인스턴스가 있습니다. 다음은이 스크린 샷입니다. drive.google.com/file/d/0B-_uggt0MBYOZElEMEItWDIwUEk/… 연결 수가 많은 유휴 CPU가 있습니다
Alaa Badran

이것은 다른 것이 아니라 연결입니다
Orlando
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.