AWS RDS 연결 제한 작동하지 않습니다. 이 문제를 해결하기

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

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



답변

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 요청에 따라 다릅니다.


답변

max_connections기본 매개 변수 정책을 업데이트 하여 값을 변경 하거나 새 정책을 만들 수 있습니다. 후자를 사용하는 것이 좋습니다.

  • RDS로 이동
  • 파라미터 그룹
  • 새 파라미터 그룹 생성 (AWS는 모든 것을 기본값으로 유지)
  • 검색 max_connections
  • 사용할 값 변경
  • RDS 인스턴스로 이동하여 수정
  • 생성 된 새 파라미터 그룹을 선택하고 인스턴스를 다시 시작하거나 다음 유지 관리 기간 동안 AWS가 재부팅하도록합니다.

도움이 되었기를 바랍니다!


답변

서버 구성에서 최대 연결을 늘리면 문제가 해결 될 수 있지만 응용 프로그램 구성 및 구현 확인을 고려해야합니다.

나는 Magento의 전문가는 아니지만 최근에 작업중 인 프로젝트에서 비슷한 문제가 있었으므로 사용중인 프레임 워크의 기본 구현이 데이터베이스를 호출 할 때마다 연결이 생성되는 것을 알았습니다.

이로 인해 문제가 발생하지는 않지만 데이터베이스를 많이 사용하고 여러 연결에서 실행할 수있는 더 많은 방문자 또는 일부 작업이있는 순간 “TOO MANY CONNECTIONS”오류로 서버 충돌을 방지하는 가장 좋은 방법은 데이터베이스를 구현하는 것입니다 연결 풀.

이렇게하면 응용 프로그램이 서버가 처리 할 수있는 추가 연결을 만들지 못하고 응용 프로그램이 사용자에게 충돌하지 않습니다. 연결 풀은 사용자 요청 처리를 계속 진행할 수 있도록 연결이 사용 가능해질 때까지 요청에 대한 큐에 대한 큐를 유지합니다.

다중 스레드 시나리오에서는 연결 풀이 스레드로부터 안전해야합니다.


답변

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

SHOW VARIABLES LIKE 'max_connections';

답변

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과 유사합니다.


답변

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

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