インスタンスの高いメモリ使用量の最適化

このドキュメントでは、Cloud SQL for SQL Server インスタンスが、アンダープロビジョニングされたインスタンスの Recommender によってメモリ消費量が多いと判断された場合、そのインスタンスを確認し、最適化する方法について説明します。

SQL Server メモリ

SQL Server のメモリは次のように分類できます。

キャッシュ

これらは、データベース ページやストアド プロシージャなど、再読み込みできるディスク上のオブジェクトです。その結果、SQL Server はメモリ使用率に基づいてこれらのオブジェクトを拡大または縮小できます。キャッシュには、バッファプールとプラン キャッシュが含まれます。

固定メモリ

固定メモリは増減できます。縮小は、使用していない場合にのみ行われます。たとえば、接続の減少や、実行するクエリの数が減少した場合です。これはキャッシュとは異なります。固定メモリが十分でない場合、SQL Server のメモリが不足する可能性があります。固定メモリには、接続メモリとメモリ権限が含まれます。

SQL Server のオーバーヘッド

SQL Server のオーバーヘッドには、スレッドとスタックが含まれます。

インメモリ OLTP

インメモリ OLTP には、インメモリ テーブルとインメモリ ファイルグループが含まれます。

SQL Server によるメモリ消費量は、maximum server memorymemory.memory.limitmb を設定することで制御されます。memory.memory.limitmb パラメータは、Cloud SQL によって自動的に設定されます。

memory.memory.limitmb の詳細については、Microsoft のドキュメントをご覧ください。

メモリ最適化オプション

インスタンスのメモリ調整がさらに必要かどうかを判断するには、次の操作を行います。

  • max server memory (mb) フラグの値を確認します。

    このフラグの値は Cloud SQL に管理させることをおすすめします。 この値を手動で管理する必要がある場合は、ベスト プラクティスに記載されている max_server_memory (mb) 使用量の計算式を使用して、SQL Server がすべてのメモリを消費しないようにします。

    詳細については、特別なフラグをご覧ください。

  • Page life expectancy フラグをモニタリングします。

    Page life expectancy は、最も古いページがバッファプールに保持される時間(秒単位)を示します。 この値は Microsoft が推奨している 300 よりも大きくする必要があります。常に 300 を下回っている場合は、インスタンスのメモリ使用率が高くなっている可能性があります。次のクエリを実行して、Page life expectancy をモニタリングします。

        SELECT
          [object_name],
          [counter_name],
          [cntr_value]
        FROM
          sys.dm_os_performance_counters
        WHERE
          [object_name]
        LIKE
          '%Manager%'
        AND
          [counter_name] = 'Page life expectancy'
        
  • Memory Grants Pending フラグを確認します。

    Memory Grants Pending には、ワークスペースのメモリの付与を待機しているプロセスの合計数を指定します。 次のクエリを実行して Memory Grants Pending をチェックします。このクエリで保留中の権限が継続的に表示される場合は、メモリ使用率が高いことを示しています。データベースの待機をクエリし、メモリで待機しているステートメントを調整することで、待機時間を減らすことができます。

        SELECT
          @@SERVERNAME AS [Server Name],
          RTRIM([object_name]) AS [Object Name],
          cntr_value AS [Memory Grants Pending]
        FROM
          sys.dm_os_performance_counters WITH(NOLOCK)
        WHERE
          [object_name]
        LIKE
          N'%Memory Manager%'  -- Handles named instances
        AND
          counter_name = N'Memory Grants Pending'
        

次のステップ