Azure SQL Managed Instance のインメモリ OLTP ストレージを監視します

適用対象:Azure SQL Managed Instance

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

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

Business Critical サービス レベルには、仮想コアの数によって決まる一定量の最大インメモリ OLTP メモリが含まれまています。

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

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

この上限を超過すると、挿入操作や更新操作が (エラー 41823 で) 失敗することがあります。

インメモリ OLTP ストレージが不足する状況を修正する - エラー 41823

データベースのIn-memory OLTPストレージの上限に達すると、INSERT、UPDATE、ALTER、CREATEの操作がエラー41823で失敗します。 このエラーの場合、アクティブなトランザクションが中止します。

エラー41823は、インスタンス内のメモリ最適化テーブルとテーブル変数が、最大のインメモリ OLTPストレージサイズに達したことを示しています。

このエラーを解決するには、次のいずれかを実行します。

  • 従来のディスク ベース テーブルにデータをオフロードするなどして、メモリ最適化テーブルからデータを削除します。
  • 仮想コア数をアップグレードし、メモリ最適化テーブルに保持する必要があるデータのためのIn-memoryストレージを追加します。

Note

まれに、エラー 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 型のメモリクラークによって、インメモリ 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 Managed Instance のメモリ不足エラーの詳細を取得することもできます。 次に例を示します。

    SELECT * FROM sys.dm_os_out_of_memory_events ORDER BY event_time DESC;
    

    詳細については、「インメモリ OLTP メモリ使用量の監視とトラブルシューティング」を参照 してください。