在 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_statssys.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 記憶體使用量並進行疑難解答。