在 Azure SQL 資料庫 中監視記憶體內部 OLTP 記憶體

適用於:Azure SQL Database

使用 記憶體內部 OLTP 時,記憶體優化數據表和數據表變數中的數據會位於記憶體內部 OLTP 記憶體中。

判斷數據是否符合記憶體內部 OLTP 記憶體上限

判斷不同服務層級的記憶體上限。 每個 進階版和 業務關鍵 服務層級都有記憶體內部 OLTP 記憶體大小上限。

估計記憶體優化數據表的記憶體需求,與 Azure SQL 資料庫 中 SQL Server 的運作方式相同。 請花幾分鐘的時間檢閱 估計記憶體需求

數據表和數據表變數數據列,以及索引,會計入用戶數據大小上限。 此外, ALTER TABLE 還需要足夠的空間,才能建立新版本的整個數據表及其索引。

超過此限制之後,插入和更新作業可能會開始失敗。 此時,您必須刪除資料以回收記憶體,或升級資料庫的服務層級或計算大小。 如需詳細資訊,請參閱 更正記憶體內部 OLTP 記憶體狀況 - 錯誤 41823 和 41840

監視和警示

您可以在 Azure 入口網站 中監視記憶體內部記憶體使用量,作為計算大小的記憶體上限百分比:

  1. 在 SQL 資料庫的 [概觀] 頁面上,選取 [監視] 頁面中的圖表。 或者,在導覽功能表中,找出 [監視 ],然後選取 [ 計量]。
  2. 選取 [新增計量]
  3. 在 [基本] 底下,選取計量記憶體內部 OLTP 儲存體 百分比
  4. 若要新增警示,請選取 [ 資源使用率 ] 方塊以開啟 [ 計量 ] 頁面,然後選取 [ 新增警示規則]。 請遵循指示來 建立計量警示規則

或者,使用下列查詢來顯示記憶體內部記憶體使用率:

SELECT xtp_storage_percent FROM sys.dm_db_resource_stats;

更正記憶體不足 OLTP 儲存情況 - 錯誤 41823 和 41840

符合您資料庫中的記憶體內部 OLTP 記憶體上限,會導致 INSERT、UPDATE、ALTER 和 CREATE 作業失敗,錯誤 41823(針對單一資料庫)或錯誤 41840(適用於彈性集區)。 這兩個錯誤都會導致作用中交易中止。

錯誤 41823 和 41840 表示資料庫或集區中的記憶體優化數據表和數據表變量達到記憶體內部 OLTP 記憶體大小上限。

若要解決此錯誤,請:

  • 從記憶體優化數據表中刪除數據,可能會將數據卸除至傳統磁碟數據表;或
  • 將服務層級升級為具有足夠記憶體內部記憶體的服務層級,以取得您需要保留在記憶體優化數據表中的數據。

注意

在罕見的情況下,錯誤 41823 和 41840 可能是暫時性的,這表示記憶體內部 OLTP 記憶體已足夠,且重試作業會成功。 因此,建議您同時監視記憶體內部 OLTP 記憶體的整體可用,並在第一次遇到錯誤 41823 或 41840 時重試。 如需重試邏輯的詳細資訊,請參閱 使用記憶體內部 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;