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;