다음을 통해 공유


메모리 부족 이벤트 (sys.dm_os_out_of_memory_events)

적용 대상:Azure SQL 데이터베이스Azure SQL Managed Instance

최근 OOM(메모리 부족) 이벤트 집합을 반환합니다.

Azure SQL Database의 메모리 부족 상태에 대한 자세한 내용은 Azure SQL Database의 메모리 부족 오류 문제를 참조하세요.

열 이름 데이터 형식 설명
event_time 날짜/시간 OOM 이벤트 시간입니다. Null을 허용하지 않습니다.
oom_cause tinyint OOM 근본 원인을 나타내는 숫자 값입니다. OOM 원인은 추론 알고리즘에 의해 결정되며 한정된 신뢰도로 제공됩니다. Null을 허용하지 않습니다.
oom_cause_desc nvarchar(30) 에 대한 설명입니다 oom_cause. Null을 허용하지 않습니다.
0. - OOM 원인을 확인할 수 없습니다. UNKNOWN
1. HEKATON_POOL_MEMORY_LOW - 메모리 내 OLTP에 사용되는 리소스 풀의 메모리 부족 자세한 내용은 메모리 내 OLTP 모니터링을 참조하세요.
2. MEMORY_LOW - 데이터베이스 엔진 프로세스에 사용할 수 있는 메모리 부족
3. OS_MEMORY_PRESSURE - 운영 체제의 외부 메모리 압력으로 인한 OOM
4. OS_MEMORY_PRESSURE_SQL - 다른 데이터베이스 엔진 인스턴스의 외부 메모리 압력으로 인한 OOM
5. NON_SOS_MEMORY_LEAK - 비 SOS 메모리의 누수로 인한 OOM(예: 로드된 모듈)
6. SERVERLESS_MEMORY_RECLAMATION - 서버리스 데이터베이스의 메모리 매립과 관련된 OOM
7. MEMORY_LEAK - SOS 메모리 누수로 인한 OOM
8. SLOW_BUFFER_POOL_SHRINK - 버퍼 풀이 메모리 압력을 받을 만큼 빠르게 메모리를 해제하지 않기 때문에 OOM
9. INTERNAL_POOL - 내부 리소스 풀의 메모리 부족
10. SYSTEM_POOL - 시스템 리소스 풀의 메모리 부족
11. QUERY_MEMORY_GRANTS - 쿼리에서 보유한 대용량 메모리 부여로 인한 OOM
12. REPLICAS_AND_AVAILABILITY - SloSecSharedPool 리소스 풀의 워크로드로 인한 OOM
available_physical_memory_mb int 사용 가능한 실제 메모리(메가바이트)입니다. Null을 허용하지 않습니다.
initial_job_object_memory_limit_mb int 데이터베이스 엔진 시작 시 작업 개체 메모리 제한(메가바이트)입니다. 작업 개체에 대한 자세한 내용은 리소스 거버넌스를 참조 하세요. Null을 허용합니다.
current_job_object_memory_limit_mb int 작업 개체 현재 메모리 제한(메가바이트)입니다. Null을 허용합니다.
process_memory_usage_mb int 인스턴스별 총 프로세스 메모리 사용량(메가바이트)입니다. Null을 허용하지 않습니다.
non_sos_memory_usage_mb int SOS 생성 스레드, 비 SOS 구성 요소에서 만든 스레드, 로드된 DLL 등을 포함하여 SOS가 아닌 사용량(메가바이트)입니다. null을 허용하지 않습니다.
committed_memory_target_mb int SOS 대상 메모리(메가바이트)입니다. Null을 허용하지 않습니다.
committed_memory_mb int SOS 커밋된 메모리(메가바이트). Null을 허용하지 않습니다.
allocation_potential_memory_mb int 새 할당을 위해 데이터베이스 엔진 인스턴스에 사용할 수 있는 메모리(메가바이트)입니다. Null을 허용하지 않습니다.
oom_factor tinyint 내부용으로만 OOM 이벤트와 관련된 추가 정보를 제공하는 값입니다. Null을 허용하지 않습니다.
oom_factor_desc nvarchar(30) 에 대한 설명입니다 oom_factor. 내부 전용. Null을 허용하지 않습니다.
0 - UNDEFINED
1 - ALLOCATION_POTENTIAL
2 - BLOCK_ALLOCATOR
3 - ESCAPE_TIMEOUT
4 - FAIL_FAST
5 - MEMORY_POOL
6 - EMERGENCY_ALLOCATOR
7 - VIRTUAL_ALLOC
8 - SIMULATED
9 - BUF_ALLOCATOR
10 - QUERY_MEM_QUEUE
11 - FRAGMENT
12 - INIT_DESCRIPTOR
13 - MEMORY_POOL_PRESSURE
14 - DESCRIPTOR_ALLOCATOR
15 - DESCRIPTOR_ALLOCATOR_ESCAPE
oom_resource_pools nvarchar(4000) 각 풀에 대한 메모리 사용 통계를 포함하여 메모리 부족 리소스 풀입니다. 이 정보는 JSON 값으로 제공됩니다. Null을 허용합니다.
top_memory_clerks nvarchar(4000) 각 클럭에 대한 메모리 사용 통계를 포함하여 메모리 사용량별 상위 메모리 클럭 이 정보는 JSON 값으로 제공됩니다. Null을 허용합니다.
top_resource_pools nvarchar(4000) 각 리소스 풀에 대한 메모리 사용 통계를 포함하여 메모리 사용량별 상위 리소스 풀입니다. 이 정보는 JSON 값으로 제공됩니다. Null을 허용합니다.
possible_leaked_memory_clerks nvarchar(4000) 메모리가 누수된 메모리 클럭입니다. 추론을 기반으로 하며 한정된 수준의 신뢰도를 제공합니다. 이 정보는 JSON 값으로 제공됩니다. Null을 허용합니다.
possible_non_sos_leaked_memory_mb int SOS가 아닌 메모리가 MB(있는 경우)로 유출되었습니다. 추론을 기반으로 하며 한정된 수준의 신뢰도를 제공합니다. Null을 허용합니다.

사용 권한

Azure SQL Managed Instance에서 사용 권한이 필요합니다 VIEW SERVER PERFORMANCE STATE .

SQL Database Basic, S0S1 서비스 목표 또는 탄력적 풀 내의 데이터베이스에 대해서는 서버 관리자 계정, Microsoft Entra 관리자 계정 또는 ##MS_ServerPerformanceStateReader##서버 역할의 멤버 자격이 필요합니다. 다른 모든 SQL Database 서비스 목표에 대해서는 데이터베이스에 대한 VIEW DATABASE PERFORMANCE STATE 권한 또는 ##MS_ServerPerformanceStateReader## 서버 역할의 멤버 자격이 필요합니다.

설명

이 보기의 각 행은 데이터베이스 엔진에서 발생한 OOM(메모리 부족) 이벤트를 나타냅니다. 모든 OOM 이벤트를 캡처할 수 있는 것은 아닙니다. 최신 OOM 이벤트가 발생하면 이전 OOM 이벤트가 결과 집합에서 사라질 수 있습니다. 결과 집합은 데이터베이스 엔진을 다시 시작할 때 유지되지 않습니다.

현재 이 DMV는 SQL Server 2022(16.x) 및 SQL Server 2025(17.x) 미리 보기에서 표시되지만 지원되지 않습니다.

확장 이벤트 summarized_oom_snapshot

summarized_oom_snapshot 확장 이벤트는 메모리 부족 이벤트 검색을 system_health 간소화하기 위한 이벤트 세션의 일부입니다. 각 summarized_oom_snapshot 확장 이벤트는 의 행에 sys.dm_os_out_of_memory_events해당합니다. 자세한 내용은 블로그: 데이터베이스 엔진의 메모리 부족 오류를 해결하는 새로운 방법을 참조하세요.

예시

A. 사용 가능한 모든 OOM 이벤트 가져오기

다음 예제에서는 현재 연결된 데이터베이스를 호스팅하는 데이터베이스 엔진에 대해 가장 최근 시간별로 정렬된 모든 이벤트 데이터를 반환합니다.

SELECT *
FROM sys.dm_os_out_of_memory_events
ORDER BY event_time DESC;

B. 각 OOM 이벤트에 대한 상위 메모리 클럭 가져오기

다음 예제에서는 이벤트 데이터의 하위 집합을 반환하고 열에서 JSON 데이터를 top_memory_clerks 확장합니다. 결과 집합의 각 행은 특정 OOM 이벤트에 대한 최상위 메모리 클럭을 나타냅니다.

SELECT event_time,
       oom_cause_desc,
       oom_factor_desc,
       oom_resource_pools,
       top_resource_pools,
       clerk_type_name,
       clerk_page_allocated_mb,
       clerk_vm_committed_mb
FROM sys.dm_os_out_of_memory_events
CROSS APPLY OPENJSON(top_memory_clerks)
                    WITH (
                         clerk_type_name sysname '$.clerk_type_name',
                         clerk_page_allocated_mb bigint '$.page_allocated_mb',
                         clerk_vm_committed_mb bigint '$.vm_committed_mb'
                         )
ORDER BY event_time DESC, clerk_page_allocated_mb DESC;

C. 각 OOM 이벤트에 대한 상위 리소스 풀 가져오기

다음 예제에서는 이벤트 데이터의 하위 집합을 반환하고 열에서 JSON 데이터를 top_resource_pools 확장합니다. 결과 집합의 각 행은 특정 OOM 이벤트에 대한 상위 리소스 풀을 나타냅니다.

SELECT event_time,
       oom_cause_desc,
       oom_factor_desc,
       oom_resource_pools,
       top_memory_clerks,
       pool_name,
       pool_allocations_mb,
       pool_target_mb,
       pool_is_oom
FROM sys.dm_os_out_of_memory_events
CROSS APPLY OPENJSON(top_resource_pools)
                    WITH (
                         pool_name sysname '$.pool_name',
                         pool_allocations_mb bigint '$.allocations_mb',
                         pool_target_mb bigint '$.pool_target_mb',
                         pool_is_oom bit '$.is_oom'
                         )
ORDER BY event_time DESC, pool_allocations_mb DESC;