sys.dm_os_out_of_memory_events

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

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

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

列名称 数据类型 描述
event_time datetime2,而不是 null OOM 事件时间
oom_cause tinyint,而不是 null 指示 OOM 根本原因的数值。 OOM 原因由启发式算法确定,并提供有限的置信度。
oom_cause_desc nvarchar(60),不为 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. 标准版RVERLESS_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(60),不为 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(max),null 内存不足的资源池,包括每个池的内存使用情况统计信息。 此信息以 JSON 值的形式提供。
top_memory_clerks nvarchar(max),非 null 内存消耗量最高的内存职员,包括每个职员的内存使用情况统计信息。 此信息以 JSON 值的形式提供。
top_resource_pools nvarchar(max),非 null 按内存消耗列出的顶级资源池,包括每个资源池的内存使用情况统计信息。 此信息以 JSON 值的形式提供。
possible_leaked_memory_clerks nvarchar(max),null 已泄漏内存的内存职员。 基于启发式,并提供有限的置信度。 此信息以 JSON 值的形式提供。
possible_non_sos_leaked_memory_mb int、null 泄露的非 SOS 内存(如果有)。 基于启发式,并提供有限的置信度。

权限

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

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

注解

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

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

summarized_oom_快照扩展事件

summarized_oom_snapshot 扩展事件是现有 system_health 事件会话的一部分,用于简化检测。 检测到内存不足(OOM)事件时会出现此事件。 此 DMV 与扩展事件中summarized_oom_snapshot记录的活动保持一致,这两者均在 2022 年 1 月引入Azure SQL 数据库。 有关详细信息,请参阅博客文章:排查数据库引擎中内存不足错误的新方法

示例

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

SELECT * FROM sys.dm_os_out_of_memory_events ORDER BY event_time DESC;