監視 Azure SQL 受控執行個體中的記憶體內部 OLTP 儲存體
適用於:Azure SQL 受控執行個體
有了記憶體內部 OLTP,經記憶體最佳化的資料表中的資料和資料表變數位於記憶體內部 OLTP 儲存體中。
判斷資料是否未超過記憶體內部 OLTP 儲存體上限
業務關鍵服務層級包含一定數量的記憶體內部 OLTP 記憶體上限,這是虛擬核心數目決定的限制。
為 SQL Server 估計經記憶體最佳化的資料表的記憶體需求與針對 Azure SQL 受控執行個體的運作方式相同。 請花幾分鐘的時間檢閱估計記憶體需求。
資料表和資料表變數資料列以及索引,都會計入使用者資料大小上限。 此外,ALTER TABLE
還需要足夠的空間,以建立新版本的整個資料表及其索引。
超過此限制之後,插入和更新作業可能會啟動失敗,並出現錯誤 訊息 41823。
更正 OLTP 儲存體記憶體不足的情況 - 錯誤 41823
達到資料庫中的記憶體內部 OLTP 儲存體上限會導致 INSERT、UPDATE、ALTER 和 CREATE 作業失敗,並出現錯誤訊息 41823。 此錯誤可能導致作用中的交易中止。
錯誤訊息 41823 表示執行個體中經記憶體最佳化的資料表和資料表變數已達到記憶體內部 OLTP 儲存體大小上限。
若要解決此錯誤:
- 從經記憶體最佳化的資料表中刪除資料,可能將資料卸載至傳統磁碟資料表;或,
- 升級虛擬核心計數可新增記憶體內部儲存空間,以儲存您需要保留在經記憶體最佳化的資料表中的資料。
注意
在罕見的情況下,錯誤 41823 可能是暫時性的,這表示有足夠可用的記憶體內部 OLTP 儲存體,重試作業會成功。 因此,建議同時監視整體可用的記憶體內部 OLTP 儲存體,並在第一次遇到錯誤 41823 時重試。 如需重試邏輯的詳細資訊,請參閱記憶體內部 OLTP 的衝突偵測和重試邏輯。
使用 DMV 監視
藉由定期監視記憶體耗用量,您可以判斷記憶體耗用量的成長方式,以及資源限制中還剩下多少空間。 識別資料庫或執行個體中物件所耗用的記憶體數量。 例如,DMV sys.dm_db_xtp_table_memory_stats 或 sys.dm_os_memory_clerks。
您可以藉由查詢
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 引擎的記憶體。 在
sys.dm_os_memory_clerks
上使用下列查詢以尋找記憶體內部 OLTP 引擎所使用的所有記憶體,包括專用於特定資料庫的記憶體。-- This DMV accounts for all memory used by the in-memory 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;
如需詳細資訊,請參閱監視記憶體內部 OLTP 記憶體使用量並進行疑難排解。