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. 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(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_snapshot扩展事件
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;