RDS(MSSQL) max connection 문의

0

RDS(MSSQL Enter)를 운영중에 있습니다. 최근 세션관련하여 문제가 있어 아래와 같이 문의 드립니다.

환경: RDS(MSSQL, db.m5.2xlarge)

[Max 커넥션 값]

  • https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Limits.html#RDS_Limits.MaxConnections (In some instances, the total RAM is 16 GiB, or 17,179,869,184 bytes. In these instances, the variable DBInstanceClassMemory automatically subtracts the amounts reserved to the operating system and the RDS processes that manage the instance. The remainder of the subtraction is then divided by 12,582,880. This results in the maximum connections number being around 1,300, depending on instance type, instance size, and DB engine)
  • 위 내용을 토대로 계산하면 m5.2xlarge(16GB 메모리) > 17,179,869,184 Byte / 12,582,880 = 1,365 (최대 1,300 개) 인듯 합니다.

[문의]

  • MSSQL 의 경우 32,767개 Limit 으로 IDC 환경이나 EC2(MSSQL) 환경에서는 커넥션 수치는 고려하지 않았으며 문제도 없었습니다.
  • 커넥션 풀(1,300개 이상)로 DB 부하(AAS 및 Load 이상수치 발생)로 지연 및 장애가 있었습니다.
  1. RDS에서 최대 1,300개 세션으로 제한이 걸려있는 이유가 어떤걸까요?
  2. app 에서 처리를 제대로 못해 결국 대기세션이 증가하는걸텐데 로직수정 등의 방법밖에 없을지요? (즉, On-pre 환경에서 고려하지 않았던 환경을 개선해야하는지..)
  3. 위 1,300개 세션이 Max 라면 Limit 증가가 가능할지요?? (ex. 케이스오픈 or 스펙상향 조정 등)
3개 답변
0

확인결과 사용중인 m5.2xlarge 의 경우(8vCPU/32RAM)용량으로 메모리가 32기가 입니다. 이 경우, Max Connection이 2,730개가 되는게 맞을까요??

그럼 최근 커넥션 풀로 인한 장애가 아닐 가능성도 있어보여서... 메모리 32기가에 따른 max connections 정보를 알고 싶습니다.

답변함 10달 전
  • 안녕하세요. 말씀하신 max connection 수치들 (16기가 > 1300개 정도, 32기가 > 2730개 정도)은 MySQL / MariaDB 엔진 기준으로 계산된 수치입니다. MSSQL 은 다시 확인해보니 RDS 에서 설정하는 parameter group 에서 기본값으로 0 (unlimited) 로 되어 있고, 실제 connection 설정은 MSSQL 내 SQL Server Management Studio (SSMS) 에서 하게 되는데 여기에서도 기본값은 0으로 세팅되어 있다고 합니다. https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-user-connections-server-configuration-option?view=sql-server-ver16

    따라서 아무런 설정 없이 사용하셨다면 connection 수치는 제한없이 MSSQL 에서 지원하는 32768 까지 사용가능한 상태로 보이고, 여기에 사용하시는 환경(쿼리나, data size등)에 따라 남아있는 메모리만큼 connection 이 가능할 것으로 생각됩니다. 이 정보는 사용환경에 따라 워낙 가변적이라 메모리 32GB 라고 해서 딱 몇개의 connection 이 가능하다고 말씀드리기 어렵고 RDS 콘솔의 monitoring 탭의 cloudwatch 지표를 확인해서 free memory 와 connection 상황등을 같이 보시면서 판단해보셔야 할것 같습니다

0

RDS에서 최대 1,300개 세션으로 제한이 걸려있는 이유가 어떤걸까요?

이건 제 예상입니다만, RDS는 매니지드 서비스이기 때문에 지정한 사양에서 최대한 성능을 낼 수 있는 것이 1300이 아닐까 생각했습니다.

app 에서 처리를 제대로 못해 결국 대기세션이 증가하는걸텐데 로직수정 등의 방법밖에 없을지요? (즉, On-pre 환경에서 고려하지 않았던 환경을 개선해야하는지..)

RDS의 세션 관리는 RDS Proxy를 사용하는 것도 하나의 방법이라고 생각합니다.
RDS Proxy는 데이터베이스 연결을 풀링하고 공유하여 세션이 낭비되지 않도록 할 수 있습니다.
https://docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/rds-proxy.html

위 1,300개 세션이 Max 라면 Limit 증가가 가능할지요?? (ex. 케이스오픈 or 스펙상향 조정 등)

매개변수 그룹에서 "user connections"의 수치를 변경하는 것으로 변경이 가능하다고 생각합니다.

profile picture
전문가
답변함 10달 전
0

안녕하세요. AWS RDS는 Managed 서비스로써 사용하시는 RDS Instance Spec (memory 등) 에 적절한 설정값을 기본값으로 제공해드리고 있습니다. max connection 은 DBMS 시스템에서 서버의 메모리 용량에 따라 사용가능한 connection 수치가 달라질 수 있습니다. m5.2xlarge (16GB 메모리) 에서 안정적으로 사용가능할 것으로 예상되는 connection 수를 계산한 것이 1300개여서 기본으로 1300으로 설정되는 것이며, 필요하시면 직접 원하는 숫자를 입력해서 변경 가능합니다 (파라메터 그룹에 설정하고 해당 파라메터를 RDS 에 적용하시면 됩니다).

다만 connection 수는 서버의 메모리를 사용하기 때문에 과다 접속으로 메모리가 부족하게 될 경우 접속 불가 및 DB 서버 다운등의 장애가 발생할 수 있습니다. 이럴 경우에는 m5.4xlarge 등으로 메모리가 더 많은 인스턴스로 변경하시면 기본 connection 수치도 더 크게 적용되므로, 테스트 해보시면서 적절한 값을 적용해서 사용하시면 됩니다.

AWS
Hyeon
답변함 10달 전

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인