메모리 사용량 모니터링

적용 대상:SQL Server

SQL Server 인스턴스를 주기적으로 모니터링하여 메모리 사용량이 일반적인 범위 내에 있는지 확인합니다.

SQL Server 최대 메모리 구성

기본적으로 SQL Server 인스턴스는 시간이 지남에 따라 서버에서 사용 가능한 대부분의 Windows 운영 체제 메모리를 사용할 수 있습니다. 메모리를 획득하면 메모리 압력이 감지되지 않는 한 해제되지 않습니다. 이는 의도적으로 설계되었으며 SQL Server 프로세스의 메모리 누수는 나타내지 않습니다. 최대 서버 메모리 옵션을 사용하여 SQL Server에서 대부분의 용도로 획득할 수 있는 메모리 양을 제한합니다. 자세한 내용은 메모리 관리 아키텍처 가이드를 참조하세요.

SQL Server on Linux에서 mssql-conf 도구와 memory.memorylimitmb 설정을 사용하여 메모리 한도를 설정합니다.

운영 체제 메모리 모니터링

메모리 부족 상태를 모니터링하려면 다음과 같은 Windows Server 카운터를 사용합니다. sys.dm_os_process_memory sys.dm_os_sys_memory 동적 관리 뷰 를 통해 많은 운영 체제 메모리 카운터를 쿼리할 수 있습니다.

  • 메모리: 사용 가능한 바이트
    이 카운터는 현재 프로세스에서 사용할 수 있는 메모리의 바이트 수를 나타냅니다. Available Bytes 카운터의 값이 낮으면 운영 체제 메모리의 전반적인 부족을 나타낼 수 있습니다. 이 값은 sys.dm_os_sys_memory.available_physical_memory_kb 사용하여 T-SQL을 통해 쿼리할 수 있습니다.

  • 메모리: Pages/sec
    이 카운터는 하드 페이지 폴트로 인해 디스크에서 검색하거나 페이지 폴트로 인해 작업 집합 내의 사용 가능한 디스크 공간에 쓴 페이지 수를 나타냅니다. Pages/sec 카운터에 대한 높은 비율은 과도한 페이징을 나타낼 수 있습니다.

  • 메모리: Page Faults/sec 이 카운터는 시스템 프로세스를 포함한 모든 프로세스에 대한 페이지 오류 비율을 나타냅니다. 컴퓨터에서 사용 가능한 메모리가 많더라도 디스크에 대한 페이징 속도는 0이 아닌 낮지만 일반적으로 발생합니다. Microsoft Windows VMM(Virtual Memory Manager)은 SQL Server 및 기타 프로세스에서 해당 프로세스의 작업 집합 크기를 트리밍할 때 페이지를 가져옵니다. 이 VMM 작업으로 인해 페이지 폴트가 발생할 수 있습니다.

  • 프로세스: Page Faults/sec 이 카운터는 지정된 사용자 프로세스에 대한 페이지 오류 비율을 나타냅니다. 프로세스 모니터링 : 페이지 오류/초 를 사용하여 SQL Server의 페이징으로 인해 디스크 작업이 발생하는지 확인합니다. SQL Server 또는 다른 프로세스가 과도한 페이징의 원인인지 확인하려면 SQL Server 프로세스 인스턴스에 대한 Process: Page Faults/sec 카운터를 모니터링합니다.

과도한 페이징을 해결하는 방법에 대한 자세한 내용은 운영 체제 설명서를 참조하세요.

SQL Server에서 사용하는 메모리 격리

SQL Server 메모리 사용량을 모니터링하려면 다음 SQL Server 개체 카운터를 사용합니다. 동적 관리 뷰 sys.dm_os_performance_counters 또는 sys.dm_os_process_memory 통해 많은 SQL Server 개체 카운터를 쿼리할 수 있습니다.

기본적으로 SQL Server는 사용 가능한 시스템 리소스에 따라 메모리 요구 사항을 동적으로 관리합니다. SQL Server에 더 많은 메모리가 필요한 경우 운영 체제를 쿼리하여 사용 가능한 실제 메모리를 사용할 수 있는지 여부를 확인하고 사용 가능한 메모리를 사용합니다. OS에 사용 가능한 메모리가 부족한 경우 SQL Server는 메모리 부족 상태가 완화되거나 SQL Server가 최소 서버 메모리 제한에 도달할 때까지 메모리를 다시 운영 체제로 해제합니다. 그러나 최소 서버 메모리 및 최대 서버 메모리 서버 구성 옵션을 사용하여 메모리를 동적으로 사용하는 옵션을 재정의할 수 있습니다. 자세한 내용은 서버 메모리 옵션을 참조 하세요.

SQL Server에서 사용하는 메모리 양을 모니터링하려면 다음 성능 카운터를 검사합니다.

  • SQL Server: Memory Manager: Total Server Memory (KB)
    이 카운터는 SQL Server 메모리 관리자가 현재 SQL Server에 커밋한 운영 체제 메모리의 양을 나타냅니다. 이 수는 실제 활동에 따라 필요에 따라 증가할 것으로 예상되며 SQL Server 시작 후 증가할 것입니다. committed_kb 열을 관찰하는 sys.dm_os_sys_info 동적 관리 뷰를 사용하여 이 카운터를 쿼리합니다.

  • SQL Server: 메모리 관리자: 대상 서버 메모리(KB)
    이 카운터는 최근 워크로드에 따라 SQL Server에서 사용할 수 있는 이상적인 메모리 양을 나타냅니다. 일반적인 작업 기간 후에 총 서버 메모리와 비교하여 SQL Server에 할당된 메모리 양이 원하는지 여부를 확인합니다. 일반적인 작업 후에는 총 서버 메모리대상 서버 메모리 가 비슷해야 합니다. 총 서버 메모리가 대상 서버 메모리보다 훨씬 낮으면 SQL Server 인스턴스에 메모리 압력이 발생할 수 있습니다. SQL Server가 시작된 후 기간 동안 총 서버 메모리는 총 서버 메모리가 증가함에 따라 대상 서버 메모리보다 낮을 것으로 예상됩니다. committed_target_kb 열을 관찰하는 sys.dm_os_sys_info 동적 관리 뷰를 사용하여 이 카운터를 쿼리합니다. 메모리 구성 방법에 대한 자세한 내용과 모범 사례는 서버 메모리 구성 옵션을 참조하세요.

  • Process: Working Set
    이 카운터는 운영 체제에 따라 현재 프로세스에서 사용 중인 실제 메모리의 양을 나타냅니다. 이 카운터의 sqlservr.exe 인스턴스를 확인합니다. sys.dm_os_process_memory 동적 관리 뷰를 사용하여 열을 관찰하여 이 카운터를 쿼리합니다physical_memory_in_use_kb.

  • 프로세스: 프라이빗 바이트
    이 카운터는 프로세스가 운영 체제에 자체적으로 사용하기 위해 요청한 메모리 양을 나타냅니다. 이 카운터의 sqlservr.exe 인스턴스를 확인합니다. 이 카운터에는 최대 서버 메모리 옵션으로 제한되지 않는 메모리 할당을 포함하여 sqlservr.exe에서 요청한 모든 메모리 할당이 포함되므로 이 카운터는 최대 서버 메모리 옵션보다 큰 값을 보고할 수 있습니다.

  • SQL Server: Buffer Manager: 데이터베이스 페이지
    이 카운터는 데이터베이스 콘텐츠가 있는 버퍼 풀의 페이지 수를 나타냅니다. SQL Server 프로세스 내에 다른 비버퍼 풀 메모리를 포함하지 않습니다. sys.dm_os_performance_counters 동적 관리 뷰를 사용하여 이 카운터를 쿼리합니다.

  • SQL Server: Buffer Manager: Buffer Cache Hit Ratio
    이 카운터는 SQL Server와 관련이 있습니다. 90 이상의 비율이 바람직합니다. 90보다 큰 값은 디스크에서 읽을 필요 없이 메모리의 데이터 캐시에서 데이터에 대한 모든 요청의 90% 이상이 충족되었음을 나타냅니다. SQL Server Buffer Manager에 대한 자세한 내용은 SQL Server Buffer Manager 개체를 참조하세요. sys.dm_os_performance_counters 동적 관리 뷰를 사용하여 이 카운터를 쿼리합니다.

  • SQL Server: 버퍼 관리자: 페이지 평균 수명
    이 카운터는 가장 오래된 페이지가 버퍼 풀에 유지되는 시간(초)을 측정합니다. NUMA 아키텍처를 사용하는 시스템의 경우 이는 모든 NUMA 노드의 평균입니다. 더 높고 성장하는 가치가 가장 좋습니다. 급격한 하락은 버퍼 풀 안팎의 상당한 데이터 변동을 나타내며, 이는 워크로드가 이미 메모리에 있는 데이터를 완전히 활용할 수 없음을 나타냅니다. 각 NUMA 노드에는 버퍼 풀의 자체 노드가 있습니다. 둘 이상의 NUMA 노드가 있는 서버에서 SQL Server: 버퍼 노드: 페이지 평균 수명을 사용하여 각 버퍼 풀 노드의 페이지 평균 수명을 확인합니다. sys.dm_os_performance_counters 동적 관리 뷰를 사용하여 이 카운터를 쿼리합니다.

예제

현재 메모리 할당 확인

다음 쿼리는 현재 할당된 메모리에 대한 정보를 반환합니다.

SELECT
(total_physical_memory_kb/1024) AS Total_OS_Memory_MB,
(available_physical_memory_kb/1024)  AS Available_OS_Memory_MB
FROM sys.dm_os_sys_memory;

SELECT  
(physical_memory_in_use_kb/1024) AS Memory_used_by_Sqlserver_MB,  
(locked_page_allocations_kb/1024) AS Locked_pages_used_by_Sqlserver_MB,  
(total_virtual_address_space_kb/1024) AS Total_VAS_in_MB,
process_physical_memory_low,  
process_virtual_memory_low  
FROM sys.dm_os_process_memory;  

현재 SQL Server 메모리 사용률 확인

다음 쿼리는 현재 SQL Server 메모리 사용률에 대한 정보를 반환합니다.

SELECT
sqlserver_start_time,
(committed_kb/1024) AS Total_Server_Memory_MB,
(committed_target_kb/1024)  AS Target_Server_Memory_MB
FROM sys.dm_os_sys_info;

페이지 평균 수명 결정

다음 쿼리는 전체 버퍼 관리자 수준 및 각 NUMA 노드 수준에서 SQL Server 인스턴스의 현재 페이지 평균 수명 값을 관찰하는 데 사용합니다sys.dm_os_performance_counters.

SELECT
CASE instance_name WHEN '' THEN 'Overall' ELSE instance_name END AS NUMA_Node, cntr_value AS PLE_s
FROM sys.dm_os_performance_counters    
WHERE counter_name = 'Page life expectancy';