Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
RDS for SQL Server 인스턴스의 사용 가능한 메모리 부족 문제를 해결하려면 어떻게 해야 합니까?
Amazon Relational Database(Amazon RDS) for SQL Server의 사용 가능한 메모리 부족 문제를 해결하려고 합니다.
해결 방법
인스턴스의 메모리 사용량 모니터링
메모리 사용량을 모니터링하려면 Amazon CloudWatch 지표 또는 향상된 모니터링을 사용할 수 있습니다.
CloudWatch 지표 사용
메모리 부족을 확인하려면 Amazon RDS 콘솔을 사용하여 FreeableMemory CloudWatch 지표를 모니터링합니다.
사용 가능한 메모리가 부족할 때 워크로드가 증가하는 것을 확인하려면 다음 지표를 모니터링합니다.
- DatabaseConnections
- CPUUtilization
- ReadIOPS
- ReadThroughput
- WriteIOPS
- WriteThroughput
위 지표에 대한 자세한 내용은 Amazon RDS의 Amazon CloudWatch 인스턴스 수준 지표를 참조하십시오.
향상된 모니터링 켜기
Microsoft SQL Server의 운영 체제(OS) 지표를 모니터링하려면 향상된 모니터링을 사용합니다. 향상된 모니터링을 켜면 지표 수집 간격을 1, 5, 10, 15, 30 또는 60초로 설정할 수 있습니다. 기본값은 60초 단위이지만 1초 또는 5초로 단위를 설정하는 것이 좋습니다.
또한 향상된 모니터링을 사용하여 CloudWatch 경보를 생성하면 Amazon RDS for SQL Server DB 인스턴스의 메모리 사용량을 모니터링할 수 있습니다.
Amazon RDS 인스턴스가 사용하는 메모리 제한
인스턴스의 max_server_memory 값을 결정한 다음, max_server_memory를 시스템 전체 메모리 압력을 유발하지 않는 값으로 설정합니다.
max_server_memory 값 결정
다음 계산을 사용하여 인스턴스의 max_server_memory 값을 결정하십시오.
max_server_memory = total_RAM - (OS를 위한 1GB + memory_basis_amount_of_RAM_on_the_server)
total_RAM은 전체 인스턴스 유형 메모리와 동일합니다.
memory_basis_amount_of_RAM_on_the_server은 다음과 같은 방식으로 결정됩니다.
-
서버의 RAM이 4GB에서 16GB 사이인 경우 RAM 4GB당 1GB를 유지합니다. 예를 들어 RAM이 16GB인 서버의 경우 4GB를 유지하십시오.
-
서버의 RAM이 16GB를 초과하는 경우 RAM 4GB당 1GB를 최대 16GB까지 유지합니다. 16GB보다 큰 RAM 8GB당 1GB를 유지하십시오.
예를 들어 서버의 RAM이 64GB인 경우 max_server_memory 계산은 다음과 같습니다.
- OS를 위한 1GB
- 최대 16GB RAM: 16/4 = 4GB
- 16GB보다 큰 나머지 RAM: (64-16)/8 = 6GB
- (OS를 위한 1GB + memory_basis_amount_of_RAM_on_the_server) = 1 + 4 + 6 = 11GB
- max_server_memory: 64 - 11 = 53GB
max_server_memory 설정
max_server_memory를 변경하려면 사용자 지정 파라미터 그룹을 사용하여 값을 구성합니다. max_server_memory 값을 **최대 서버 메모리(MB)**로 제공하십시오. max_server_memory는 동적 파라미터이므로 변경 사항을 적용하기 위해 재부팅할 필요가 없습니다.
참고: max_server_memory를 구성한 후에는 FreeableMemory를 지속적으로 모니터링하여 할당된 메모리를 늘릴지 또는 줄일지 결정해야 합니다.
DB 인스턴스에서 SSIS, SSAS 또는 SSRS 옵션 사용 여부 확인
RDS 옵션 그룹을 확인하여 DB 인스턴스에서 SQL Server Integration Services(SSIS), SQL Server Analysis Services(SSAS) 또는 SQL Server Reporting Services(SSRS) 옵션을 사용하는지 확인합니다. 옵션에서 사용하는 메모리는 max_server_memory 설정 외부에 존재하므로 인스턴스의 메모리 사용량이 늘어납니다. 이러한 옵션을 사용하지 않는 경우 옵션 그룹을 수정하여 제거하십시오.
참고: 인스턴스에서 SSIS, SSAS 또는 SSRS를 사용하는 경우 옵션에 맞게 max_server_memory를 조정해야 합니다.
예를 들어 SSRS를 사용하는 경우 SSRS 최대 메모리 값을 DB 인스턴스 총 메모리의 10%로 설정합니다. 예를 들어 메모리가 64GiB인 인스턴스의 10%는 약 6.4GiB입니다. 따라서 max_server_memory 값을 약 46GiB(64 - 11 - 6.4 = 46GiB)로 조정하십시오.
데이터베이스 연결 확인
인스턴스에 데이터베이스를 연결할 때마다 워커 스레드에 대한 버퍼 풀 외부에 일부 메모리를 할당해야 합니다. 따라서 DatabaseConnections에서 급증이 발생하면 사용 가능한 메모리가 감소할 수 있습니다.
Performance Insights를 사용한 DB 인스턴스 모니터링
Performance Insights를 사용하여 데이터베이스 성능을 분석하고 인스턴스 속도를 저하시키는 잠재적 병목 현상을 파악할 수 있습니다. 데이터베이스 부하, 대기, 쿼리, 호스트 및 사용자를 모니터링하려면 Performance Insights 대시보드를 사용하십시오.
DB 인스턴스에 대한 정기 유지 관리 수행
정기적인 인덱스 유지 관리를 수행하고 통계를 업데이트된 상태로 유지하십시오. 고도로 조각화된 인덱스는 I/O 활동을 증가시키고 메모리 사용량을 증가시킬 수 있습니다. 또한 통계가 오래되면 카디널리티 추정이 부정확해지고 데이터베이스에서 최적이 아닌 쿼리 계획을 선택하게 될 수 있습니다. 자세한 내용은 Microsoft 웹 사이트에서 인덱스 유지 관리를 최적화하여 쿼리 성능을 개선하고 리소스 소비를 줄이기를 참조하십시오. 또한 Microsoft 웹 사이트에서 UPDATE STATISTICS(Transact-SQL)를 참조하십시오.
참고: 사용량이 많지 않은 시간대 또는 유지 관리 기간 중에 인덱스 및 통계 유지 관리를 수행하는 것이 좋습니다.
PLE 및 BCHR 모니터링
메모리 압력을 확인하려면 Page Life Expectancy(PLE) 및 버퍼 캐시 적중률(BCHR)을 모니터링합니다. 최적의 성능을 위해 PLE 및 BCHR 값이 최대한 높은지 확인하십시오. PLE 및 BCHR 값이 일정 기간 동안 지속적으로 낮으면 데이터에 액세스하는 쿼리를 조정하거나 인스턴스 클래스를 늘려 더 많은 메모리를 제공합니다.
Performance Insights를 사용하여 지표를 모니터링하려면 다음 단계를 완료하십시오.
- Amazon RDS 콘솔을 엽니다.
- 탐색 창에서 Performance Insights를 선택합니다.
- DB 인스턴스 필터링 검색 필드를 사용하여 모니터링하려는 인스턴스를 선택합니다.
- 지표를 검토하려는 시간 범위를 설정합니다.
- 지표 대시보드에서 사용자 지정 대시보드 - SQL Server 데이터베이스를 선택한 다음, 첫 번째 위젯 추가를 선택합니다.
- 이름, 범주 또는 ID를 기준으로 지표 필터링 검색 필드에서 Page Life Expectancy를 검색한 다음, 선택합니다.
- 위젯 추가를 선택합니다.
- 6단계와 7단계를 반복하여 사용자 지정 대시보드의 버퍼 캐시 적중률을 선택합니다.
PLE 및 BCHR에 대한 자세한 내용은 Microsoft 웹 사이트에서 버퍼 관리자 성능 객체를 참조하십시오.
인스턴스에 메모리 압력이 있고 PLE 및 BCHR이 낮으면 PAGEIOLATCH 대기 시간이 증가합니다. Microsoft SQL Server는 페이지가 디스크에서 메모리로 로드되기를 기다리고 있습니다. 또한 메모리 부족으로 인해 쿼리의 메모리 요청이 실패할 경우 RESOURCE_SEMAPHORE 대기가 발생할 수도 있습니다. 그러면 데이터 페이지가 메모리에 충분히 오래 캐시되지 않기 때문에 CPU 사용량이 증가합니다. 이 경우 Microsoft SQL Server가 디스크의 데이터에 반복적으로 액세스해야 합니다.
워크로드에 적합한 인스턴스 크기 선택
인스턴스의 메모리 양은 인스턴스 유형에 따라 다릅니다. DB 인스턴스가 워크로드를 위한 충분한 리소스를 확보할 수 있도록 리소스가 충분한 인스턴스 클래스를 선택해야 합니다. 인스턴스의 리소스 수가 적으면 성능 문제가 발생합니다. 너무 큰 인스턴스는 리소스를 낭비합니다.
예를 들어 db.r5.8xlarge 인스턴스 클래스는 32 vCPU와 256GiB의 메모리를 제공합니다. db.r5.8xlarge를 사용하여 Amazon RDS 인스턴스를 프로비저닝하는 경우 다음 리소스가 인스턴스 클래스의 256GiB 메모리를 모두 공유합니다.
- 운영 체제
- Amazon RDS 프로세스
- 데이터베이스 엔진
- 워커 스레드
- SSIS, SSAS, SSRS와 같은 비즈니스 인텔리전스 제품군 애플리케이션
Microsoft SQL Server에서 메모리를 사용하는 방법에 대한 자세한 내용은 Microsoft 웹 사이트에서 메모리 관리 아키텍처 가이드를 참조하십시오.
리소스 사용량 기준 설정
인스턴스의 리소스 사용량 기준을 설정하려면 FreeableMemory, Page Life Expectancy 및 버퍼 캐시 적중률과 같은 지표를 모니터링합니다. 인스턴스의 데이터 볼륨이 크게 증가하면 max_server_memory 값을 증가시킵니다. 인스턴스에서 동일한 성능 수준을 유지하려면 데이터 볼륨 변화에 비례하여 max_server_memory 값을 증가시켜야 합니다.
참고: SQL Server 내에서 메모리를 사용하는 구성 요소를 파악하려면 보고서 및 DMV와 같은 SQL Server 도구를 사용할 수 있습니다.
SQL Server Management Studio(SSMS)를 사용하여 SQL Server 메모리 사용량을 검토하려면 다음 단계를 완료하십시오.
- SSMS를 연 다음, Amazon RDS for SQL Server 인스턴스에 연결합니다.
- 객체 탐색기에서 Amazon RDS 인스턴스 엔드포인트 이름을 마우스 오른쪽 버튼으로 클릭합니다.
- 보고서, 표준 보고서, 메모리 사용량을 선택합니다.
SSMS를 다운로드하려면 Microsoft 웹 사이트에서 SQL Server Management Studio(SSMS) 다운로드를 참조하십시오.
또한 sys.dm_os_memory_clerks를 쿼리하여 SQL Server 내에서 최대 메모리를 사용하는 구성 요소를 파악할 수도 있습니다. 자세한 내용은 Microsoft 웹 사이트에서 sys.dm_os_memory_clerks(Transact-SQL) 및 SQL Server 엔진의 내부 메모리 사용량을 참조하십시오.
