サーバー メモリ オプション

min server memory および max server memory の 2 つのサーバー メモリ オプションを使用して、Microsoft SQL Server のインスタンスで使用されるバッファー プールのメモリ量を MB 単位で再構成します。

既定では、使用可能なシステム リソースに基づいて、必要なメモリ量が動的に変更されるようになっています。min server memory の既定の設定は 0 で、max server memory の既定の設定は 2,147,483,647 です。max server memory で指定できる最小メモリ容量は 16 MB です。

注意

max server memory を最小値に設定すると、SQL Server のパフォーマンスが極端に悪化し、場合によっては起動できなくなります。このオプションの変更後に SQL Server を起動できなくなった場合は、–f 起動オプションを使用して SQL Server を起動し、max server memory を元の値に戻します。詳細については、「SQL Server サービスのスタートアップ オプションの使用」を参照してください。

メモリを動的に使用する場合、SQL Server はシステムに定期的に照会して、物理メモリの空き容量を確認します。SQL Server はメモリ通知 API QueryMemoryResourceNotification を使用して、いつバッファー プールがメモリの割り当てまたは解放を行うことができるかを判断します。

SQL Server がメモリを動的に使用できるようにする方法をお勧めしますが、手動でメモリ オプションを設定して SQL Server がアクセスできるメモリの量を制限することもできます。この場合は、SQL Server 用のメモリ量を設定する前に、オペレーティング システムおよび SQL Server の他のインスタンス (およびコンピューターが SQL Server 専用でない場合は他のシステム) が使用するメモリの量を物理メモリ全体から差し引いて適切なメモリ設定を決定します。この差が、SQL Server に割り当てることができる最大メモリ量です。

メモリ オプションの手動設定

min server memorymax server memory に異なる値を設定して、メモリ範囲を与えます。この方法は、システム管理者またはデータベース管理者が同じコンピューター上で実行する他のアプリケーションに必要なメモリと合わせて SQL Server のインスタンスを構成する場合に便利です。

min server memory を使用すると、SQL Server インスタンスのバッファー プールで使用できる最小メモリ量を確保できます。SQL Server は、min server memory で指定されたメモリ量を起動時にすぐに割り当てるわけではありません。ただし、クライアントの負荷によってメモリの使用量がこの値に達すると、min server memory の値を小さくしない限り、SQL Server は割り当てたバッファー プールからメモリを解放できません。

注意

SQL Server は、min server memory で指定されたメモリ量を必ず割り当てるわけではありません。サーバーの負荷が min server memory で指定されたメモリ量の割り当てを必要としない場合、SQL Server はより少ないメモリで実行します。

max server memory を使用すると、SQL Server のバッファー プールで指定の量よりも多くのメモリが使用されないようにして、他のアプリケーションを短時間で起動するためのメモリを残しておくことができます。SQL Server は、max server memory で指定されたメモリ量を起動時にすぐに割り当てるわけではありません。max server memory で指定された値に達するまで、SQL Server の要求に応じてメモリの使用量が増加します。SQL Server は、max server memory の値を大きくしない限り、このメモリ使用量を超えることができません。

max server memory の値を小さくする前に、負荷のかかった状態でパフォーマンス モニターを使用して SQLServer:Buffer Manager パフォーマンス オブジェクトを調べ、Stolen pages カウンターおよび Reserved pages カウンターの現在の値を確認してください。これらのカウンターは、8 K ページの数としてメモリの量を報告します。メモリ不足エラーが発生しないようにするには、これら 2 つの値の合計よりも大きい値を、max server memory に設定する必要があります。最小の max server memory 設定値 (MB 単位) の目安は、([Stolen pages] + [Reserved pages])/ 100 です。max server memory の値を小さくするには、SQL Server を再起動してメモリを解放することが必要な場合もあります。メモリ オプションの設定方法については、「固定量のメモリを設定する方法 (SQL Server Management Studio)」を参照してください。

ネットワーク アプリケーションのデータ スループットの最大化

SQL Server のシステム メモリ使用量を最大化するには、ファイルのキャッシュに使用されるメモリ量を制限する必要があります。ファイル システム キャッシュを制限するには、[ファイル共有のデータ スループットを最大にする] が選択されていないことを確認します。最小のファイル システム キャッシュを指定するには、[メモリの使用を最小にする] または [バランスをとる] を選択します。

オペレーティング システムの現在の設定を確認するには

  1. [スタート] ボタンをクリックし、[コントロール パネル] をクリックします。次に [ネットワーク接続] をダブルクリックして、[ローカル エリア接続] をダブルクリックします。

  2. [全般] タブで [プロパティ] をクリックし、[Microsoft ネットワーク用ファイルとプリンター共有] を選択して、[プロパティ] をクリックします。

  3. [ネットワーク アプリケーションのデータ スループットを最大にする] が選択されている場合は、他のオプションを選択して [OK] をクリックし、すべてのダイアログ ボックスを閉じます。

Windows Server 2003 の AWE メモリ

Windows Server 2003 では、SQL Server は Address Windowing Extensions (AWE) メモリを使用して、SQL Server 自体のメモリ要求とオペレーティング システムのメモリ要求の負荷分散を行うことができます。SQL Server とオペレーティング システム間での負荷分散は、min server memory および max server memory オプションの制約を受けます。サーバーのハードウェアでホット アド メモリがサポートされている場合は、サーバーを再起動せずに必要に応じて物理メモリを追加できます。awe enabled 構成オプションの詳細については、「awe enabled オプション」を参照してください。詳細については、「ホット アド メモリ」を参照してください。

注意

構成された仮想メモリ制限よりも物理メモリが少ないサーバーでは、動的な AWE メモリがサポートされています。

ページがディスクにスワップされないように、できるだけ多くのメモリを SQL Server に割り当てるのが理想的です。しきい値は、使用しているシステムによって異なります。たとえば、SQL Server 専用の 32 GB のシステムでは、30 ~ 31 GB が SQL Server の適切な最大しきい値です。64 GB のシステムでは、60 ~ 62 GB が適切なしきい値です。

注意

SQL Server のメモリを増やした場合は、追加したメモリに応じて仮想メモリ サポート ファイル (PAGEFILE.SYS) を拡張するための十分な空き領域がディスクにあることを確認する必要があります。仮想メモリ サポート ファイルの詳細については、Windows のマニュアルを参照してください。

Windows のシステム モニターの統計を使用すると、必要に応じてメモリ値を調整できます。ただし、この値はメモリを増減した場合や、システムの使用法を変更した場合以外は変更しないでください。

仮想メモリ マネージャー

32 ビット オペレーティング システムでは、4 GB の仮想アドレス空間にアクセスできます。仮想メモリの 2 GB はプロセスごとに専有され、アプリケーションで使用できます。2 GB はオペレーティング システムが使用するために予約されています。すべてのオペレーティング システムのエディションには、オペレーティング システム用の仮想メモリを 1 GB に制限して、アプリケーションで最大 3 GB の仮想メモリにアクセスできるようにするスイッチが含まれています。スイッチのメモリ構成の使用方法については、4 GB のチューニング (4GT) に関する Windows のマニュアルを参照してください。32 ビットの SQL Server が 64 ビット オペレーティング システムで実行されている場合、ユーザーは 4 GB すべての仮想アドレス空間を使用できます。

注意

PAE はサーバーでホット アド メモリ デバイスが使用されている場合のみ自動的に有効になります。この場合、ホット アド メモリ デバイスを使用するように構成されているシステム上で、/PAE スイッチを使用する必要はありません。それ以外の場合に 4 GB を超えるメモリを利用するには、Boot.ini ファイルで /PAE スイッチを指定する必要があります。

Windows 仮想メモリ マネージャー (VMM) は、使用可能な物理メモリに 4 GB のアドレス空間をマップします。したがって、AWE が使用できる物理メモリは、使用するオペレーティング システムによって異なります。さまざまなオペレーティング システムでサポートされている物理メモリ量の詳細については、Windows のマニュアルの「Windows のリリース別のメモリ制限」を参照してください。

仮想アドレス システムでは、仮想メモリと物理メモリの比率が 1:1 を超えるような物理メモリの設定を許可しています。その結果、さまざまな物理メモリ構成のコンピューターで大規模なプログラムを実行できます。しかし、すべてのプロセスの平均ワーキング セットを合わせた容量よりもはるかに大きな仮想メモリを使用すると、パフォーマンスが低下する可能性があります。

min server memory および max server memory は拡張オプションです。sp_configure システム ストアド プロシージャを使用してこれらの設定を変更するには、show advanced options を 1 に設定する必要があります。これらの設定は、サーバーを再起動しなくてもすぐに有効になります。

SQL Server の複数インスタンスの実行

データベース エンジンの複数のインスタンスを実行する場合は、3 つの方法でメモリを管理できます。

  • max server memory を使用して、メモリ使用量を制御します。許可する値の合計がコンピューターの合計物理メモリを超えないように注意して、各インスタンスの最大値を設定します。予測されるワークロードまたはデータベース サイズに比例して、各インスタンスにメモリを割り当てることができます。この方法の利点は、新しいプロセスまたはインスタンスが起動したときに、直ちに空きメモリを使用できることです。欠点は、実行していないインスタンスがある場合、残っている空きメモリを実行中のインスタンスが利用できないことです。

  • min server memory を使用して、メモリ使用量を制御します。最小値の合計がコンピューターの合計物理メモリよりも 1 ~ 2 GB 少なくなるように、各インスタンスの最小値を設定します。この場合も、インスタンスの予測される負荷に比例して、最小値を設定できます。この方法の利点は、一度にすべてのインスタンスを実行しない場合に、実行中のインスタンスが残っている空きメモリを使用できることです。また、この方法は、コンピューターの別のプロセスがメモリを集中的に使用する場合にも有効です。少なくとも、妥当なメモリ量を SQL Server が使用できることが保証されます。欠点は、新しいインスタンス (または他のプロセス) が起動するときに、実行中のインスタンスがメモリを解放するのにしばらく時間がかかる場合があることです。特に、変更されたページをデータベースに書き戻す必要がある場合は時間がかかります。また、ページング ファイルのサイズを大幅に増やすことが必要になる場合もあります。

  • 何も行いません (非推奨)。ワークロードを伴う最初のインスタンスに、すべてのメモリが割り当てられる傾向があります。アイドル状態のインスタンスまたは後から起動したインスタンスは、使用可能な最小限のメモリ量だけで実行することになります。SQL Server は、インスタンス間でメモリ使用量の調整を図ることはありません。ただし、すべてのインスタンスは、Windows の Memory Notification シグナルに対応して、バッファー プールのサイズを調整します。Memory Notification API を使用して Windows がアプリケーション間のメモリを調整することはありません。システムで使用できるメモリに関するグローバルなフィードバックを提供するだけです。

これらの設定はインスタンスを再起動しなくても変更できるので、簡単にいろいろな設定を試して、使用パターンに最適な設定を見つけることができます。

使用例

次の例では、max server memory オプションを 4 GB に設定します。

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO

sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO