監視 Azure SQL 資料庫的記憶體內部 OLTP 儲存體
適用於: Azure SQL 資料庫
使用記憶體內部 OLTP 時,經記憶體最佳化的資料表和資料表變數中的資料會位於記憶體內部 OLTP 儲存體中,這是針對記憶體內部資料所保留的部分資料庫記憶體。
- 進階版 (DTU) 與業務關鍵 (vCore) 服務層級中的資料庫和彈性集區支援記憶體內部 OLTP。
- 超大規模資料庫服務層級支援記憶體內部 OLTP 物件的子集,但不包含記憶體最佳化資料表。 如需詳細資訊,請參閱超大規模資料庫限制。
判斷資料是否符合記憶體內部 OLTP 儲存體上限
判斷不同服務物件的儲存體上限。 每個 進階版和業務關鍵服務物件都有記憶體內部 OLTP 儲存體大小上限。
為經記憶體最佳化的資料表估計記憶體需求,與在 Azure SQL 資料庫針對 SQL Server 的估計方式相同。 檢閱預估記憶體需求。
資料表和資料表變數資料列以及索引,都會計入使上限。 此外,ALTER TABLE
陳述式需要足夠的記憶體,以建立新版本的整個資料表及其索引。
一旦超過此上限,插入和更新作業可能會無法開始。 此時,您必須刪除資料以回收記憶體,或擴大資料庫的服務物件或彈性集區。 如需詳細資訊,請參閱更正記憶體內部 OLTP 儲存體不足的情況 - 錯誤 41823 和 41840。
監視和警示
您可以在 Azure 入口網站中監視記憶體內部 OLTP 儲存體使用量,作為服務物件的儲存體上限百分比:
- 在 SQL Database 的 [概觀] 頁面,於 [監視] 頁面選取圖表。 或者,從導覽功能表尋找 [監視],然後選取 [計量]。
- 選取 [新增計量]。
- 在 [基本]下方,選取計量 [記憶體內部 OLTP 記憶體百分比]。
- 若要新增警示,請選取 資源使用率 方塊以開啟 [計量]頁面,然後選取 [新增警示規則]。 請遵循這些指示建立計量警示規則。
或者,使用下列查詢來顯示記憶體內部儲存體使用率:
SELECT xtp_storage_percent
FROM sys.dm_db_resource_stats
ORDER BY end_time DESC;
解決記憶體內部 OLTP 的記憶體不足錯誤
在資料庫或彈性集區中觸達記憶體內部 OLTP 儲存體上限可能會導致 INSERT
、UPDATE
、ALTER
和 CREATE
陳述是失敗,以及錯誤 41823 (針對單一資料庫) 或錯誤 41840 (針對彈性集區)。 這兩個錯誤都會導致作用中的交易中止。
錯誤 41823 和 41840 表示資料庫或彈性集區中經記憶體最佳化的資料表和資料表變數大小已達到記憶體內部 OLTP 儲存體大小上限。
若要解析這些錯誤,您可以:
- 從經記憶體最佳化的資料表中刪除資料,可能將資料卸載至傳統磁碟資料表;或,
- 將服務物件升級為具有足夠記憶體內部 OLTP 儲存體的服務層級,以儲存您需要保留在經記憶體最佳化的資料表和資料表變數中的資料。
注意
在罕見的情況下,錯誤 41823 和 41840 可能是暫時性的,這表示有足夠的記憶體內部 OLTP 儲存體,然後重試作業成功。 因此,建議同時監視整體可用的記憶體內部 OLTP 儲存體,並在第一次遇到錯誤 41823 或 41840 時重試。 如需重試邏輯的詳細資訊,請參閱記憶體內部 OLTP 的衝突偵測和重試邏輯。
使用 DMV 監視
藉由主動監視記憶體耗用量,您可以判斷記憶體耗用量的成長方式,以及資源限制中的剩餘空間。 識別資料庫或執行個體中物件所耗用的記憶體數量。 您可以使用 sys.dm_db_xtp_table_memory_stats 或 sys.dm_os_memory_clerks DMV。
您可以藉由查詢
sys.dm_db_xtp_table_memory_stats
找到所有使用者資料表、索引和系統物件的記憶體耗用量:SELECT object_name(object_id) AS [Name], * FROM sys.dm_db_xtp_table_memory_stats;
管理配置給記憶體內部 OLTP 引擎和記憶體最佳化物件之記憶體的方式,與資料庫中其他記憶體取用的管理方式相同。
MEMORYCLERK_XTP
類型的 Clerk 會考量所有配置給記憶體內部 OLTP 引擎的記憶體。 使用下列查詢以尋找記憶體內部 OLTP 引擎所使用的所有記憶體,包括專用於特定資料庫的記憶體。-- This DMV accounts for all memory used by the In-Memory OLTP engine SELECT [type], [name] , memory_node_id , pages_kb/1024. AS pages_MB FROM sys.dm_os_memory_clerks WHERE [type] LIKE '%xtp%';
type name memory_node_id pages_MB -------------------- ---------- -------------- -------------------- MEMORYCLERK_XTP Default 0 18 MEMORYCLERK_XTP DB_ID_5 0 1358 MEMORYCLERK_XTP Default 64 0
您也可以使用動態管理檢視 sys.dm_os_out_of_memory_events,取得 Azure SQL 資料庫記憶體不足錯誤的詳細資訊。 例如:
SELECT * FROM sys.dm_os_out_of_memory_events ORDER BY event_time DESC;