RDS for SQL 서버 인스턴스의 여유 공간이 부족한 메모리 문제를 해결하려면 어떻게 해야 합니까?

6분 분량
0

Amazon Relational Database(Amazon RDS) for SQL 인스턴스의 여유 공간이 부족한 메모리 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

여유 메모리가 매우 부족하면 인스턴스에 예상치 못한 다운타임이 발생합니다. 따라서 인스턴스의 메모리 사용량을 모니터링하고 문제 해결 조치를 취하는 것이 중요합니다.

여유 메모리는 RDS 인스턴스에서 사용할 수 있는 메모리의 양(RAM)입니다. Amazon RDS 인스턴스에서 사용할 수 있는 총 메모리 양은 인스턴스 클래스에 따라 다릅니다. 예를 들어, 인스턴스 클래스 db.r5.8xlarge는 32개의 vCPU와 256GiB 메모리를 제공합니다. db.r5.8xlarge 인스턴스 클래스로 RDS 인스턴스를 프로비저닝하는 경우 인스턴스 클래스의 총 메모리(256GiB)는 다음과 같이 공유됩니다.

  • 운영 체제
  • Amazon RDS 프로세스
  • 데이터베이스 엔진
  • 워커 스레드
  • 비즈니스 인텔리전스 스위트(SSIS, SSAS, SSRS) 애플리케이션 등이 있습니다.

SQL Server에서 메모리를 사용하는 방법에 대한 자세한 내용은 Microsoft 설명서 웹 사이트에서 메모리 관리 아키텍처 안내서를 참조하십시오.

해결 방법

인스턴스의 메모리 사용량 모니터링

Amazon CloudWatch 지표

Amazon CloudWatch 지표를 모니터링(FreeableMemory에 대해)하여 메모리 부족 현상을 식별하십시오. FreeableMemory와 함께 사용할 수 있는 메모리가 부족할 때 다음을 모니터링하여 워크로드 증가 여부를 확인할 수 있습니다.

  • DatabaseConnections
  • CPUUtilization
  • ReadIOPS
  • ReadThroughput
  • WriteIOPS
  • WriteThroughput

Enhanced Monitoring

향상된 모니터링1, 5, 10, 15, 30 또는 60초 등의 다양한 세부 수준으로 설정하여 Microsoft SQL Server의 OS 메트릭을 모니터링할 수 있습니다. 세분성을 1초 또는 5초로 설정하는 것이 가장 좋습니다(기본값은 60초). Enhanced Monitoring을 사용하여 Amazon RDS for SQL Server DB 인스턴스의 메모리 사용량을 모니터링하도록 CloudWatch 경보를 생성 할 수 있음

사용 가능한 메모리 부족 문제 해결

여유 메모리 부족 문제를 해결하려면 다음과 같이 하십시오.

RDS 인스턴스가 사용하는 메모리 제한

최대 서버 메모리를 시스템 전체에 메모리 부하를 일으키지 않는 값으로 설정하여 RDS 인스턴스에서 사용하는 메모리를 제한합니다. 다음 공식을 사용하여 인스턴스의 최대 서버 메모리 값을 결정할 수 있습니다.

max_server_memory = total_RAM – (1 GB for the OS + memory_basis_amount_of_RAM_on_the_server)

Total_RAM인스턴스 클래스 메모리와 동일하며, 이 메모리에서 memory_basis_amount_of_RAM_on_the_server는 다음과 같이 결정됩니다.

  • 서버의 RAM이 4GB에서 16GB 사이일 경우: RAM 4GB당 1GB를 그대로 두십시오. 예를 들어 16GB 서버의 경우 4GB를 그대로 두십시오.
  • 서버의 RAM이 16GB를 초과하는 경우: RAM 4GB당 1GB는 최대 16GB까지, RAM 8GB당 1GB는 16GB 이상으로 두십시오.

예를 들어 서버에 64GB RAM이 있는 경우 계산은 다음과 같습니다.

  • 운영 체제의 경우 1GB
  • 최대 16GB RAM: 16/4 = 4GB
  • 16GB 이상의 남은 RAM: (64-16)/8 = 6
  • 남겨 둘 총 RAM: 1 + 4 + 6 = 11GB
  • max_server_memory: 64 – 11 = 53GB

참고:

  • 인스턴스에서 SSIS, SSAS 또는 SSRS를 사용하는 경우 이러한 구성 요소를 수용하도록 max_server_memory를 조정해야 합니다.
    예: RDS 인스턴스와 SSRS를 사용하려고 합니다. SSRS Max 메모리 값을 10%(DB 인스턴스 총 메모리의 백분율)로 설정합니다. 이 값은 64GiB 메모리가 있는 인스턴스에서는 약 6.4GiB입니다. max_server_memory 값은 약 46GiB(64-11-6.4)여야 합니다.
  • max_server_memory를 처음 구성한 후에는 FreeableMemory를 지속적으로 모니터링하여 할당된 메모리를 늘리거나 줄일 여부를 결정해야 합니다.

max_server_memory를 변경하려면 사용자 지정 파라미터 그룹을 사용하여 값을 구성합니다. max_server_memory 값은 MB 단위로 입력해야 합니다.

참고: max_server_memory 파라미터는 동적 파라미터입니다. 따라서 변경 사항을 적용하기 위해 재부팅할 필요가 없습니다.

데이터베이스 연결 확인

인스턴스에 대한 각 데이터베이스 연결에는 작업자 스레드용 버퍼 풀 외부에서 일부 메모리를 할당해야 합니다. 따라서 DatabaseConnections이 폭증하면 여유 메모리가 줄어들 수 있습니다.

SSIS, SSAS 또는 SSRS 구성 요소의 DB 인스턴스 내 사용 여부 확인

Amazon RDS for SQL Server 옵션 그룹을 사용하여 SSIS, SSAS 또는 SSRS 구성 요소가 DB 인스턴스에서 사용되는지 확인합니다. 이러한 구성 요소에서 사용하는 메모리는 max_server_memory 설정 외부에 있습니다. 이러한 기능을 사용하지 않는 경우 옵션 그룹을 수정하여 제거하십시오. 이러한 기능을 제거하면 인스턴스의 메모리 사용량이 줄어듭니다.

성능 개선 도우미를 사용한 DB 인스턴스 모니터링

성능 개선 도우미를 사용하면 DB 인스턴스를 모니터링하여 데이터베이스 성능 분석을 수행할 수 있습니다. 성능 개선 도우미 대시보드를 사용하여 데이터베이스 로딩, 대기, 쿼리, 호스트, 사용자 등을 모니터링할 수 있습니다. 이를 모니터링하면 인스턴스 속도를 저하하는 잠재적 병목 현상을 식별하는데 유용합니다.

DB 인스턴스에 대한 정기적인 유지 관리 수행

정기적인 인덱스 유지 관리를 수행하고 통계를 최신 상태로 유지합니다. 인덱스의 조각이 많으면 I/O 활동이 증가하여 메모리 사용량이 늘어날 수 있습니다. 마찬가지로 오래된 통계로 인해 농도 추정치가 부정확해 최적이 아닌 쿼리 계획을 선택할 수 있습니다.

참고: 사용량이 적은 시간이나 유지 관리 기간에 인덱스 및 통계 유지 관리를 수행하는 것이 가장 좋습니다.

페이지 기대 수명 및 버퍼 캐시 적중률 모니터링

페이지 기대 수명(PLE)은 페이지가 참조 없이 버퍼 풀에 머무는 시간(초)을 나타냅니다.

버퍼 캐시 적중률(BCHR)은 버퍼 풀의 데이터 페이지가 만족한 페이지 요청의 비율입니다.

PLE 및 BCHR을 모니터링하면 메모리 압력이 식별됩니다. 성능 개선 도우미를 사용하여 이러한 지표를 모니터링하려면 다음과 같이 수행하십시오.

  1. Amazon RDS 콘솔을 엽니다.
  2. 성능 개선 도우미를 선택합니다.
  3. 모니터링하려는 RDS for SQL Server 인스턴스를 선택합니다.
  4. 지표를 검토하려는 시간 범위를 설정한 다음 지표 관리를 선택합니다.
  5. 데이터베이스 지표, 페이지 기대 수명, 버퍼 캐시 적중률을 선택합니다.

최적의 성능을 위해 이러한 지표의 값은 가능한 한 높아야 합니다. 성능 개선 도우미를 사용하여 이러한 지표를 모니터링할 수 있습니다. 이러한 지표의 값이 일정 기간 동안 지속적으로 낮게 유지되는 것을 볼 수 있습니다. 이러한 경우 데이터에 액세스하는 쿼리를 조정하거나, 인스턴스 클래스를 늘려 더 많은 메모리를 제공하십시오.

인스턴스에 메모리 부하가 걸리고 PLE 및 BCHR이 낮으면 PAGEIOLATCH 대기 시간이 늘어납니다. 즉, SQL Server는 디스크에서 페이지를 가져와서 메모리로 로드하기를 기다리고 있습니다. 또한 메모리 크런치로 인해 쿼리의 메모리 요청을 처리할 수 없는 경우 RESOURCE_SEMAPHORE 대기 시간이 인식될 수 있습니다. 이로 인해 데이터 페이지가 메모리에 충분히 오래 캐시되지 않기 때문에 CPU 사용량이 증가합니다. 이 경우 SQL Server는 반복적으로 디스크에 액세스하여 성능 문제를 일으키는 데이터에 액세스해야 합니다.

가장 많은 리소스를 사용하여 쿼리 식별

성능 개선 도우미를 사용하여 가장 많은 리소스를 활용하는 쿼리를 캡처하고, 이를 조정하여 성능을 향상시키십시오.

워크로드에 적합한 인스턴스 크기 선택

인스턴스의 메모리 용량은 인스턴스 유형에 따라 달라집니다. DB 인스턴스가 워크로드에 충분한 리소스를 확보할 수 있도록 적절한 리소스를 갖춘 인스턴스 클래스를 선택하는 것이 중요합니다. 리소스가 적은 인스턴스는 성능 문제를 겪고, 크기가 큰 인스턴스는 리소스를 낭비합니다.

리소스 사용 기준

여유 메모리, 페이지 기대 수명, 버퍼 캐시 적중률 등의 지표를 모니터링하여 인스턴스의 리소스 사용량을 기준으로 삼습니다. 인스턴스의 데이터 볼륨이 크게 증가할 경우 max_server_memory 값을 늘리십시오. 인스턴스에서 동일한 수준의 성능을 유지하려면 데이터 볼륨 변화에 비례하여 max_server_memory 값을 늘려야 합니다.

참고: 보고서 및 DMV 등의 SQL Server 기본 도구를 사용해 SQL Server 내부 메모리로 구성 요소를 식별할 수 있습니다. SQL Server Management Studio(SSMS)를 사용하여 SQL Server 메모리 사용량을 검토할 수 있습니다.

  1. SQL Server Management Studio(SSMS)를 열고 RDS for SQL Server 인스턴스에 연결합니다.
  2. 개체 탐색기에서 RDS 인스턴스 엔드포인트 이름을 마우스 오른쪽 버튼으로 클릭합니다.
  3. 보고서, 표준 보고서, 메모리 사용량을 선택합니다.

또한 sys.dm_os_memory_clerks DMV를 쿼리하여 SQL Server 내에서 최대 메모리를 사용하는 구성 요소를 식별할 수 있습니다.