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

更新 : 2006 年 4 月 14 日

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 です。

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

メモリを動的に使用する場合、SQL Server はシステムに定期的に照会して、物理メモリの空き容量を確認します。Microsoft Windows 2000 の場合、SQL Server はバッファ キャッシュを拡張または縮小して、サーバーの利用状況に応じて物理メモリの空き容量を 4 ~ 10 MB に維持します。このようにメモリの空き容量を維持することによって、Windows 2000 のページングが防止されます。空きメモリが少ない場合、SQL Server は Windows 2000 に対してメモリを解放します。空きメモリが多い場合、SQL Server はメモリをバッファ プールに割り当てます。SQL Server によってバッファ プールにメモリが追加されるのは、ワークロードが高いためにメモリを増やす必要がある場合だけです。アクティブでないサーバーのバッファ プールのサイズは増えません。

Windows Server 2003 では、SQL Server はメモリ通知 API QueryMemoryResourceNotification を使用して、いつバッファ プールがメモリの割り当てまたは解放を行うことができるかを判断します。

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

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

SQL Server のメモリ オプションを手動で設定する主な方法は 2 つあります。

  • 1 つは、min server memorymax server memory を同じ値に設定する方法です。この値は、メモリがその値に達した後に SQL Server のバッファ プールに割り当てる固定量のメモリに相当します。
  • もう 1 つは、min server memorymax server memory に異なる値を設定して、メモリ範囲を与える方法です。この方法は、システム管理者またはデータベース管理者が同じコンピュータ上で実行する他のアプリケーションに必要なメモリと合わせて SQL Server のインスタンスを構成する場合に便利です。

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

ms178067.note(ja-jp,SQL.90).gifメモ :
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 を再起動してメモリを解放することが必要な場合もあります。

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

[ネットワーク アプリケーションのデータ スループットを最大にする] ネットワーク接続オプションを選択した場合、オペレーティング システムではファイル システム キャッシュに I/O ページをキャッシュすることによって、バッファの I/O 操作を実行するアプリケーションに優先度を与えます。このオプションにより、通常動作時に SQL Server で使用できるメモリが制限される場合があります。

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

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

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

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

Windows Server 2003 の AWE メモリ

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

ms178067.note(ja-jp,SQL.90).gifメモ :
Windows Server 2003 では、構成された仮想メモリ制限よりも物理メモリが少ないサーバーで動的な AWE メモリがサポートされています。Windows 2000 で AWE メモリを有効にするには、使用可能な物理メモリが仮想メモリよりも多い必要がありました。

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

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

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

仮想メモリ マネージャ

Windows 2000 や Windows Server 2003 のような 32 ビット オペレーティング システムでは、4 GB の仮想アドレス空間にアクセスできます。仮想メモリの下位 2 GB はプロセスごとに専有され、アプリケーションで使用できます。上位 2 GB はオペレーティング システムが使用するために予約されています。Windows Server 2003 など、Microsoft Windows XP Professional 以降のすべてのオペレーティング システムのエディションには、オペレーティング システム用の仮想メモリを 1 GB に制限して、アプリケーションで 3 GB の仮想メモリにアクセスできるようにする boot.ini スイッチが含まれています。/3GB スイッチのメモリ構成の使用方法については、Windows のマニュアルを参照してください。

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

Windows 仮想メモリ マネージャ (VMM) は、使用可能な物理メモリに 4 GB のアドレス空間をマップします。サポートされる物理メモリの量は、Windows Server 2003 オペレーティング システムの導入によって増加しています。したがって、AWE でアクセス可能な物理メモリは、使用するオペレーティング システムによって異なります。

  • Windows Server 2003 Standard Edition では、4 GB の物理メモリがサポートされています。
  • Windows Server 2003 Enterprise Edition では、32 GB の物理メモリがサポートされています。
  • Windows Server 2003 Datacenter Edition では、64 GB の物理メモリがサポートされています。

SQL Server などの Win32 アプリケーションは、仮想アドレスまたは論理アドレスのみを認識し、物理アドレスは認識しません。ある時点でアプリケーションが使用する物理メモリの容量 (ワーキング セット) は、使用可能な物理メモリと VMM によって決まります。アプリケーションでメモリの常駐量を直接制御することはできません。

Windows 2000 Advanced Server、Windows 2000 Datacenter Server、Windows Server 2003 Enterprise Server、および Windows Server 2003 Datacenter Server の 32 ビット エディションでは、Intel Physical Addressing Extensions (PAE) を使用して 4 GB の制限を超えることができます。Windows の boot.ini 構成ファイルの /PAE スイッチを使用すると、4 GB の制限を超える物理メモリにアクセスできます。4 GB を超える AWE メモリへのアクセスにはこれが必要です。Windows 2000 および Windows Server 2003 でこのメモリ構成を使用する方法については、Windows のマニュアルを参照してください。

Windows 2000 や Windows Server 2003 などの仮想アドレス システムでは、仮想メモリと物理メモリの比率が 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 2005 は、インスタンス間でメモリ使用量の調整を図ることはありません。ただし、すべてのインスタンスは、Windows の Memory Notification シグナルに対応して、バッファ プールのサイズを調整します。Windows 2003 Server SP1 では、Memory Notification API を使用して Windows がアプリケーション間のメモリを調整することはありません。システムで使用できるメモリに関するグローバルなフィードバックを提供するだけです。

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

参照

概念

パフォーマンスの監視とチューニング
サーバー構成オプションの設定
SQL Server での AWE メモリの有効化

その他の技術情報

RECONFIGURE (Transact-SQL)
レプリケーションのドキュメント マップ
sp_configure (Transact-SQL)

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 4 月 14 日

新しい内容 :
  • Windows Server 2003 および PAE に関する注記を追加しました。

2005 年 12 月 5 日

新しい内容 :
  • max server memory の適切な最小値について説明しました。
  • SQL Server の複数インスタンスの実行に関するセクションを追加しました。