共用方式為


監視 Azure SQL 資料庫的記憶體內部 OLTP 儲存體

適用於:Azure SQL 資料庫

使用記憶體內部 OLTP 時,經記憶體最佳化的資料表中的資料和資料表變數,位於記憶體內部 OLTP 儲存體。

判斷資料是否符合記憶體內部 OLTP 儲存體上限

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

為經記憶體最佳化的資料表估計記憶體需求,與在 Azure SQL 資料庫針對 SQL Server 的估計方式相同。 請花幾分鐘的時間檢閱估計記憶體需求

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

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

監視和警示

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

  1. SQL Database 的 [概觀] 頁面,於 [監視] 頁面選取圖表。 或者,從導覽功能表尋找 [監視],然後選取 [計量]
  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_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;