このドキュメントでは、Cloud SQL for SQL Server インスタンスが、アンダープロビジョニングされたインスタンスの Recommender によってメモリ消費量が多いと判断された場合、そのインスタンスを確認し、最適化する方法について説明します。
SQL Server メモリ
SQL Server のメモリは次のように分類できます。
キャッシュ
これらは、データベース ページやストアド プロシージャなど、再読み込みできるディスク上のオブジェクトです。その結果、SQL Server はメモリ使用率に基づいてこれらのオブジェクトを拡大または縮小できます。キャッシュには、バッファプールとプラン キャッシュが含まれます。
固定メモリ
固定メモリは増減できます。縮小は、使用していない場合にのみ行われます。たとえば、接続の減少や、実行するクエリの数が減少した場合です。これはキャッシュとは異なります。固定メモリが十分でない場合、SQL Server のメモリが不足する可能性があります。固定メモリには、接続メモリとメモリ権限が含まれます。
SQL Server のオーバーヘッド
SQL Server のオーバーヘッドには、スレッドとスタックが含まれます。
インメモリ OLTP
インメモリ OLTP には、インメモリ テーブルとインメモリ ファイルグループが含まれます。
SQL Server によるメモリ消費量は、maximum server memory
と memory.memory.limitmb
を設定することで制御されます。memory.memory.limitmb
パラメータは、Cloud SQL によって自動的に設定されます。
memory.memory.limitmb
の詳細については、Microsoft のドキュメントをご覧ください。
max server memory
の上限を適切な値に設定する必要があります。SQL Server では、max server memory
が設定されていない場合、データベース ページはメモリの 100% 近くを消費する可能性があります。これは誤解を招きかねません。
メモリ最適化オプション
インスタンスのメモリ調整がさらに必要かどうかを判断するには、次の操作を行います。
max server memory
の値を設定します。一般に、SQL Server が使用可能なメモリをすべて消費しないように、max server memory
を約 80% に設定することをおすすめします。メモリ容量が大きいインスタンスの場合、80% では低すぎるため、メモリの浪費につながる可能性があります。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'