Поделиться через


sys.dm_os_out_of_memory_events

Применимо к: База данных SQL Azure Управляемый экземпляр SQL Azure

Возвращает набор последних событий вне памяти (OOM).

Дополнительные сведения об условиях нехватки памяти в База данных SQL Azure см. в разделе "Устранение неполадок с нехваткой памяти" в База данных SQL Azure.

Имя столбца Тип данных Описание
event_time datetime Время события OOM. Не допускает значение NULL.
oom_cause tinyint Числовое значение, указывающее первопричину OOM. Причина OOM определяется эвристических алгоритмом и предоставляется с конечной степенью достоверности. Не допускает значение NULL.
oom_cause_desc nvarchar(30) oom_causeОписание . Не допускает значение NULL.
0. UNKNOWN — не удалось определить причину OOM
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 — OOM из-за утечки в памяти, отличной от SOS, например загруженных модулей
6. SERVERLESS_MEMORY_RECLAMATION — OOM, связанная с восстановлением памяти в бессерверной базе данных
7. MEMORY_LEAK — OOM из-за утечки в памяти SOS
8. — OOM из-за того, что буферный пул не освобождает память достаточно быстро под давлением памяти. SLOW_BUFFER_POOL_SHRINK
9. INTERNAL_POOL Недостаточно памяти во внутреннем пуле ресурсов
10. SYSTEM_POOL Недостаточно памяти в системном пуле ресурсов
11. QUERY_MEMORY_GRANTS — OOM из-за больших грантов памяти, содержащихся в запросах
12. REPLICAS_AND_AVAILABILITY — OOM из-за рабочих нагрузок в пуле ресурсов SloSecSharedPool
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, потоки, созданные компонентами, не являющихся SOS, загруженные библиотеки DLL и т. д. Не допускает значение 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 в мегабайтах, если таковые есть. Основываясь на эвристики и обеспеченной конечной степенью достоверности. Может принимать значение NULL.

Разрешения

Для Управляемый экземпляр SQL Azure требуется VIEW SERVER PERFORMANCE STATE разрешение.

Для целей службы База данных SQL Basic, S0 и S1, а также для баз данных в эластичных пулах, учетной записи администратора сервера, учетной записи администратора Microsoft Entra или членства в ##MS_ServerPerformanceStateReader##роли сервера требуется. Для всех остальных целей обслуживания базы данных SQL требуется разрешение VIEW DATABASE PERFORMANCE STATE в базе данных или членство в роли сервера ##MS_ServerPerformanceStateReader##.

Замечания

Каждая строка в этом представлении представляет событие вне памяти (OOM), которое произошло в ядре СУБД. Не все события OOM могут быть записаны. Старые события OOM могут исчезнуть из результирующий набор, так как происходят более последние события OOM. Результирующий набор не сохраняется во время перезапуска ядра СУБД.

В настоящее время это динамическое представление отображается, но не поддерживается в ПРЕДВАРИТЕЛЬНОй версии 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. Дополнительные сведения см . в блоге: новый способ устранения ошибок вне памяти в ядре СУБД.

Примеры

А. Получение всех доступных событий OOM

В следующем примере возвращаются все данные событий, упорядоченные по последнему времени для ядра СУБД, в котором размещена в настоящее время подключенная база данных.

SELECT *
FROM sys.dm_os_out_of_memory_events
ORDER BY event_time DESC;

В. Получение основных клерков памяти для каждого события 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;

С. Получение основных пулов ресурсов для каждого события 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;