共用方式為


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 - OOM 由於 SOS 記憶體中流失
8. SLOW_BUFFER_POOL_SHRINK - 由於緩衝池在記憶體壓力下釋放記憶體的速度不夠快,OOM
9. INTERNAL_POOL - 內部資源集區內存不足
10. SYSTEM_POOL - 系統資源集區中的記憶體不足
11. QUERY_MEMORY_GRANTS - OOM 由於查詢所持有的大型記憶體授與
12. REPLICAS_AND_AVAILABILITY - OOM,因為 SloSecSharedPool 資源集區中的工作負載
available_physical_memory_mb int,非 Null 可用的物理記憶體,以 MB 為單位。
initial_job_object_memory_limit_mb int, null 資料庫引擎啟動時的作業物件記憶體限制,以 MB 為單位。 如需作業對象的詳細資訊,請參閱 資源控管
current_job_object_memory_limit_mb int, null 作業物件目前的記憶體限制,以 MB 為單位。
process_memory_usage_mb int,非 Null 實例的處理記憶體使用量總計以 MB 為單位。
non_sos_memory_usage_mb int,非 Null 非 SOS 使用量以 MB 為單位,包括 SOS 建立的線程、非 SOS 元件所建立的線程、載入的 DLL 等。
committed_memory_target_mb int,非 Null SOS 以 MB 為單位的目標記憶體。
committed_memory_mb int,非 Null SOS 認可記憶體以 MB 為單位。
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 - SIMULATED
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 記憶體耗用量最高的記憶體 Clerk,包括每個 Clerk 的記憶體使用量統計數據。 此資訊會以 JSON 值的形式提供。
top_resource_pools nvarchar(4000), null 依記憶體耗用量排在前列的資源集區,包括每個資源集區的記憶體使用量統計數據。 此資訊會以 JSON 值的形式提供。
possible_leaked_memory_clerks nvarchar(4000), null 記憶體 clerk,其記憶體流失。 根據啟發學習法,並提供有限的信賴度。 此資訊會以 JSON 值的形式提供。
possible_non_sos_leaked_memory_mb int, null 如果有任何,則會以 MB 為單位外洩非 SOS 記憶體。 根據啟發學習法,並提供有限的信賴度。

權限

在 Azure SQL 受控執行個體 上,需要VIEW SERVER PERFORMANCE STATE許可權。

在 SQL Database [Basic][S0][S1] 服務目標,以及彈性集區中的資料庫,需要伺服器管理員帳戶、伺服器管理員帳戶、Microsoft Entra 管理員帳戶或 ##MS_ServerPerformanceStateReader##伺服器角色的成員資格。 在所有其他 SQL Database 服務目標上,需要資料庫的 VIEW DATABASE PERFORMANCE STATE 權限或 ##MS_ServerPerformanceStateReader## 伺服器角色的成員資格。

備註

此檢視中的每個數據列都代表資料庫引擎中發生的記憶體不足 (OOM) 事件。 並非所有 OOM 事件都可以擷取。 較舊的 OOM 事件可能會隨著最近的 OOM 事件發生而從結果集中消失。 在資料庫引擎重新啟動時,不會保存結果集。

目前,SQL Server 2022 (16.x) 不支援此 DMV。

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;