Azure SQL データベースでインメモリ OLTPストレージを監視します

適用対象:Azure SQL Database

インメモリ OLTP を使用して、メモリ最適化テーブルおよびテーブル変数内のデータは、インメモリ OLTP ストレージに格納されています。

データがインメモリ OLTP ストレージの上限に収まるかどうかを判断します

さまざまなサービス レベルのストレージの上限を確認します。 Premium および Business Critical サービス レベルには、それぞれインメモリ OLTP ストレージの最大サイズがあります。

メモリ最適化テーブルのメモリ必要量の推定は、Azure SQL Database で SQL Server の要件を推定する場合と同じように行います。 少し時間を取ってメモリ要件の見積もりに関するページをご確認ください。

テーブル行とテーブル変数行、およびインデックスは、最大ユーザー データ サイズにカウントされます。 また、テーブル全体とそのインデックスの新しいバージョンを作成するには、ALTER TABLE に十分な領域が必要になります。

この上限を超過すると、挿入操作や更新操作は失敗することがあります。 その場合は、データを削除してメモリを解放するか、データベースのサービス レベルまたはコンピューティング サイズをアップグレードする必要があります。 詳細については、「インメモリ OLTPストレージのエラー状況の修正 - エラー41823および41840」をご覧ください。

監視とアラート

Azure Portal で、インメモリ ストレージの使用量を、コンピューティング サイズのストレージ上限に対するパーセンテージとして監視できます。

  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 型のメモリクラークによって、インメモリ 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;