Condividi tramite


sys.dm_os_out_of_memory_events

Si applica a:Azure SQL DatabaseAzure SQL Managed InstanceDatabase SQL in Microsoft Fabric

Restituisce un set di eventi di memoria insufficiente (OOM) recenti.

Per altre informazioni sulle condizioni di memoria insufficiente in database SQL di Azure, vedere Risolvere gli errori di memoria insufficiente in database SQL di Azure.

Nome colonna Tipo di dati Descrizione
event_time datetime Ora evento OOM. Non è annullabile.
oom_cause tinyint Valore numerico che indica la causa radice OOM. La causa OOM è determinata da un algoritmo euristico e viene fornita con un grado finito di attendibilità. Non è annullabile.
oom_cause_desc nvarchar(30) Descrizione di oom_cause. Non è annullabile.
0. UNKNOWN Non è stato possibile determinare la causa OOM
1. HEKATON_POOL_MEMORY_LOW - Memoria insufficiente nel pool di risorse usato per OLTP in memoria. Per altre informazioni, vedere Monitorare OLTP in memoria.
2. MEMORY_LOW Memoria insufficiente disponibile per il processo del motore di database
3. OS_MEMORY_PRESSURE OOM a causa di una pressione di memoria esterna dal sistema operativo
4. OS_MEMORY_PRESSURE_SQL OOM a causa di una pressione di memoria esterna da altre istanze del motore di database
5. NON_SOS_MEMORY_LEAK - OOM a causa di una perdita di memoria non SOS, ad esempio moduli caricati
6. SERVERLESS_MEMORY_RECLAMATION OOM correlato al recupero della memoria in un database serverless
7. MEMORY_LEAK - OOM a causa di una perdita di memoria SOS
8. SLOW_BUFFER_POOL_SHRINK OOM a causa del pool di buffer che non rilascia memoria abbastanza velocemente sotto pressione di memoria
9. INTERNAL_POOL Memoria insufficiente nel pool di risorse interno
10. SYSTEM_POOL Memoria insufficiente in un pool di risorse di sistema
11. QUERY_MEMORY_GRANTS OOM a causa di concessioni di memoria di grandi dimensioni mantenute dalle query
12. REPLICAS_AND_AVAILABILITY - OOM a causa di carichi di lavoro nel pool di risorse SloSecSharedPool
available_physical_memory_mb Int Memoria fisica disponibile, in megabyte. Non è annullabile.
initial_job_object_memory_limit_mb Int Limite di memoria dell'oggetto processo all'avvio del motore di database, in megabyte. Per altre informazioni sugli oggetti processo, vedere Governance delle risorse. Ammette valori Null.
current_job_object_memory_limit_mb Int Limite di memoria corrente dell'oggetto processo, espresso in megabyte. Ammette valori Null.
process_memory_usage_mb Int Utilizzo totale della memoria del processo in megabyte dall'istanza. Non è annullabile.
non_sos_memory_usage_mb Int Utilizzo non SOS in megabyte, inclusi i thread creati da SOS, i thread creati da componenti non SOS, DLL caricate e così via. Non è nullable.
committed_memory_target_mb Int Memoria di destinazione SOS in megabyte. Non è annullabile.
committed_memory_mb Int Memoria di cui è stato eseguito il commit soS in megabyte. Non è annullabile.
allocation_potential_memory_mb Int Memoria disponibile per l'istanza del motore di database per le nuove allocazioni, in megabyte. Non è annullabile.
oom_factor tinyint Valore che fornisce informazioni aggiuntive relative all'evento OOM, solo per uso interno. Non è annullabile.
oom_factor_desc nvarchar(30) Descrizione di oom_factor. Solo per uso interno. Non è annullabile.
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) Pool di risorse in memoria insufficiente, incluse le statistiche di utilizzo della memoria per ogni pool. Queste informazioni vengono fornite come valore JSON. Ammette valori Null.
top_memory_clerks nvarchar(4000) Top memory clerks by memory consumption , incluse le statistiche di utilizzo della memoria per ogni clerk. Queste informazioni vengono fornite come valore JSON. Ammette valori Null.
top_resource_pools nvarchar(4000) Pool di risorse principali in base al consumo di memoria, incluse le statistiche di utilizzo della memoria per ogni pool di risorse. Queste informazioni vengono fornite come valore JSON. Ammette valori Null.
possible_leaked_memory_clerks nvarchar(4000) Clerk di memoria con memoria persa. Basato sull'euristica e fornito con un grado finito di fiducia. Queste informazioni vengono fornite come valore JSON. Ammette valori Null.
possible_non_sos_leaked_memory_mb Int Memoria non SOS persa in megabyte, se presente. Basato sull'euristica e fornito con un grado finito di fiducia. Ammette valori Null.

Autorizzazioni

In Istanza gestita di SQL di Azure, è necessaria VIEW SERVER PERFORMANCE STATE l'autorizzazione.

Negli obiettivi del servizio Basic del Database SQL, S0 e S1 e per i database nei pool elastici, è richiesto l'account amministratore del server, l'account amministratore di Microsoft Entra o l’adesione nel ##MS_ServerPerformanceStateReader## al ruolo del server. Per tutti gli altri obiettivi di servizio database SQL, è necessaria l'autorizzazione VIEW DATABASE PERFORMANCE STATE per il database o l'adesione ruolo del server ##MS_ServerPerformanceStateReader##.

Osservazioni:

Ogni riga in questa vista rappresenta un evento di memoria insufficiente (OOM) che si è verificato nel motore di database. Non tutti gli eventi OOM potrebbero essere acquisiti. Gli eventi OOM meno recenti possono scomparire dal set di risultati man mano che si verificano eventi OOM più recenti. Il set di risultati non viene salvato in modo permanente tra i riavvii del motore di database.

Attualmente, questo DMV è visibile ma non supportato in SQL Server 2022 (16.x) e SQL Server 2025 (17.x).

summarized_oom_snapshot evento esteso

L'evento summarized_oom_snapshot esteso fa parte della sessione eventi per semplificare il system_health rilevamento degli eventi di memoria insufficiente. Ogni summarized_oom_snapshot evento esteso corrisponde a una riga in sys.dm_os_out_of_memory_events. Per altre informazioni, vedere Blog: Un nuovo modo per risolvere gli errori di memoria insufficiente nel motore di database.

Esempi

Un. Ottenere tutti gli eventi OOM disponibili

Nell'esempio seguente vengono restituiti tutti i dati dell'evento ordinati in base all'ora più recente per il motore di database che ospita il database attualmente connesso.

SELECT *
FROM sys.dm_os_out_of_memory_events
ORDER BY event_time DESC;

B. Ottenere i migliori clek di memoria per ogni evento OOM

L'esempio seguente restituisce un subset di dati dell'evento ed espande i dati JSON nella top_memory_clerks colonna. Ogni riga nel set di risultati rappresenta un clerk di memoria superiore per un evento OOM specifico.

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. Ottenere i pool di risorse principali per ogni evento OOM

L'esempio seguente restituisce un subset di dati dell'evento ed espande i dati JSON nella top_resource_pools colonna. Ogni riga nel set di risultati rappresenta un pool di risorse principale per un evento OOM specifico.

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;