sys.dm_os_out_of_memory_events

适用于: Azure SQL 数据库 Azure SQL 托管实例

返回内存不足(OOM)事件的日志。

有关Azure SQL 数据库内存不足情况的详细信息,请参阅Azure SQL 数据库中的内存不足错误疑难解答。

列名称 数据类型 描述
event_time datetime,而不是 null OOM 事件时间。
oom_cause tinyint,而不是 null 指示 OOM 根本原因的数值。 OOM 原因由启发式算法确定,并提供有限的置信度。
oom_cause_desc nvarchar(30),而不是 null oom_cause描述,其中之一:
0. 未知 - 无法确定 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 - 由于 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 数据库引擎启动时的作业对象内存限制(以 MB 为单位)。 有关作业对象的详细信息,请参阅 资源治理
current_job_object_memory_limit_mb int、null 作业对象当前内存限制(以兆字节为单位)。
process_memory_usage_mb int,而不是 null 实例的总进程内存使用量(以兆字节为单位)。
non_sos_memory_usage_mb int,而不是 null 非 SOS 使用量(以兆字节为单位),包括 SOS 创建的线程、非 SOS 组件创建的线程、加载的 DLL 等。
committed_memory_target_mb int,而不是 null SOS 以兆字节为单位的目标内存。
committed_memory_mb int,而不是 null SOS 提交的内存(以兆字节为单位)。
allocation_potential_memory_mb int,而不是 null 可用于数据库引擎实例的新分配的内存(以 MB 为单位)。
oom_factor tinyint,而不是 null 一个值,提供与 OOM 事件相关的其他信息,仅供内部使用。
oom_factor_desc nvarchar(30),而不是 null oom_factor说明。 仅限内部使用。 下列其中一项:
0 - 未定义
1 - ALLOCATION_POTENTIAL
2 - BLOCK_ALLOCATOR
3 - ESCAPE_TIMEOUT
4 - FAIL_FAST
5 - MEMORY_POOL
6 - EMERGENCY_ALLOCATOR
7 - VIRTUAL_ALLOC
8 - 模拟
9 - BUF_ALLOCATOR
10 - QUERY_MEM_QUEUE
11 - 片段
12 - INIT_DESCRIPTOR
13 - MEMORY_POOL_PRESSURE
14 - DESCRIPTOR_ALLOCATOR
15 - DESCRIPTOR_ALLOCATOR_ESCAPE
oom_resource_pools nvarchar(4000),null 内存不足的资源池,包括每个池的内存使用情况统计信息。 此信息以 JSON 值的形式提供。
top_memory_clerks nvarchar(4000),null 内存消耗量最高的内存职员,包括每个职员的内存使用情况统计信息。 此信息以 JSON 值的形式提供。
top_resource_pools nvarchar(4000),null 按内存消耗列出的顶级资源池,包括每个资源池的内存使用情况统计信息。 此信息以 JSON 值的形式提供。
possible_leaked_memory_clerks nvarchar(4000),null 已泄漏内存的内存职员。 基于启发式,并提供有限的置信度。 此信息以 JSON 值的形式提供。
possible_non_sos_leaked_memory_mb int、null 泄露的非 SOS 内存(如果有)。 基于启发式,并提供有限的置信度。

权限

在Azure SQL 托管实例,需要VIEW SERVER PERFORMANCE STATE权限。

在 SQL 数据库“基本”、“S0”和“S1”服务目标中,对于“弹性池”中的数据库,服务器管理员帐户、Microsoft Entra 管理员帐户或 ##MS_ServerPerformanceStateReader## 服务器角色中的成员身份为必填项。 对于所有其他 SQL 数据库服务目标,需要数据库的 VIEW DATABASE PERFORMANCE STATE 权限或 ##MS_ServerPerformanceStateReader## 服务器角色中的成员身份。

注解

此视图中的每一行表示数据库引擎中发生的内存不足(OOM)事件。 并非所有 OOM 事件都可以捕获。 随着最近的 OOM 事件发生,较旧的 OOM 事件可能会从结果集中消失。 在数据库引擎重启后,不会保留结果集。

目前,此 DMV 在 SQL Server 2022(16.x)中是可见的,但不受支持。

summarized_oom_snapshot扩展事件

summarized_oom_snapshot扩展事件是事件会话的system_health一部分,用于简化内存不足事件的检测。 每个summarized_oom_snapshot扩展事件对应于一行。sys.dm_os_out_of_memory_events 有关详细信息,请参阅博客文章:排查数据库引擎中内存不足错误的新方法

示例

以下示例返回托管当前已连接数据库的数据库引擎最近一次排序的事件数据。

SELECT *
FROM sys.dm_os_out_of_memory_events
ORDER BY event_time DESC;