다음을 통해 공유


메모리 사용량 모니터링

적용 대상: 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_memorysys.dm_os_sys_memory 동적 관리 뷰를 통해 많은 운영 체제 메모리 카운터를 쿼리할 수 있습니다.

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

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

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

  • 프로세스: Page Faults/sec 이 카운터는 지정된 사용자 프로세스에 대한 페이지 오류 비율을 나타냅니다. Process: 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가 최소 서버 메모리 한도에 도달할 때까지 메모리를 해제하여 운영 체제로 돌려보냅니다. 그러나 최소 서버 메모리최대 서버 메모리 서버 구성 옵션을 사용하여 메모리를 동적으로 사용하도록 옵션을 재정의할 수 있습니다. 자세한 내용은 Server Memory Options(서버 메모리 구성 옵션)를 참고하세요.

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: Memory Manager: Total Server Memory (KB)
    이 카운터는 최근 워크로드를 기준으로 SQL Server에서 사용할 수 있는 이상적인 메모리양을 나타냅니다. 일정 기간에 일반적인 작업을 수행한 후 Total Server Memory와 비교하여 에 할당된 메모리양이 적절한지 확인합니다. 일반적인 작업 후에는 총 서버 메모리대상 서버 메모리가 비슷해야 합니다. 총 서버 메모리대상 서버 메모리보다 훨씬 낮으면 SQL Server 인스턴스에 메모리 압력이 발생할 수 있습니다. Total Server Memory가 증가하기 때문에 SQL Server 시작 이후 일정 기간에는 Total Server MemoryTarget Server Memory보다 낮아야 합니다. committed_target_kb 열을 관찰하는 sys.dm_os_sys_info 동적 관리 뷰를 사용하여 이 카운터를 쿼리합니다. 메모리 구성 방법에 대한 자세한 내용과 모범 사례는 서버 메모리 구성 옵션을 참조하세요.

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

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

  • SQL Server: 버퍼 매니저: 데이터베이스 페이지
    이 카운터는 버퍼 풀에서 데이터베이스 내용이 있는 페이지 수를 나타냅니다. SQL Server 프로세스 내의 기타타 비버퍼 풀 메모리를 포함하지 않습니다. sys.dm_os_performance_counters 동적 관리 뷰를 사용해 이 카운터를 쿼리합니다.

  • SQL Server: 버퍼 매니저: 버퍼 캐시 적중률
    이 카운터는 SQL Server와 관련이 있습니다. 90 이상의 비율이 바람직합니다. 값이 90%보다 크면 디스크에서 읽을 필요 없이 데이터 캐시를 통해 모든 데이터 요청의 90% 이상이 충족된 것을 나타냅니다. SQL Server 버퍼 매니저에 대한 자세한 내용은 SQL Server 버퍼 매니저 개체를 참조하세요. 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 서버 메모리 활용에 대한 정보를 반환합니다.

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;

페이지 예상 수명 확인

다음 쿼리는 sys.dm_os_performance_counters를 사용하여 전반적인 버퍼 매니저 수준과 각 NUMA 노드 수준에서 SQL Server 인스턴스의 현재 페이지 예상 수명 값을 확인합니다.

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';