共用方式為


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 - 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(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 - 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(max), null 記憶體不足的資源集區,包括每個集區的記憶體使用量統計數據。 此資訊會以 JSON 值的形式提供。
top_memory_clerks nvarchar(max),非 Null 記憶體耗用量最高的記憶體 Clerk,包括每個 Clerk 的記憶體使用量統計數據。 此資訊會以 JSON 值的形式提供。
top_resource_pools nvarchar(max),非 Null 依記憶體耗用量排在前列的資源集區,包括每個資源集區的記憶體使用量統計數據。 此資訊會以 JSON 值的形式提供。
possible_leaked_memory_clerks nvarchar(max), null 記憶體 clerk,其記憶體流失。 根據啟發學習法,並提供有限的信賴度。 此資訊會以 JSON 值的形式提供。
possible_non_sos_leaked_memory_mb int, null 如果有任何,則會以 MB 為單位外洩非 SOS 記憶體。 根據啟發學習法,並提供有限的信賴度。

權限

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

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

備註

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

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

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;