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;