32 ビットの SQL Server で大容量のメモリ割り当ての手法として AWE (Address Windowing Extensions) という設定があります。
これから数回に分けて AWE についてまとめていきたいと思います。
■SQL Server の最大メモリ
32 ビットの SQL Server 2008 R2 の最大メモリは以下のようになります。
SQL Server 2008 R2 のインストールに必要なハードウェアおよびソフトウェア
エディション | 最大メモリ |
Datacenter | オペレーティング システムの最大容量 |
Enterprise | オペレーティング システムの最大容量 |
Standard | 64 GB |
32 ビットの SQL Server ではユーザーモードの VAS (仮想アドレス空間) は 2GB または 3GB となり、それ以上のメモリを使用するためには AWE を使用する必要があります。
AWE に関しては以下の技術情報の絵がわかり易いと思います。
プロセス アドレス空間
AWE を使用することでユーザーモードの VAS の一部を使用して、利用できるメモリの領域を拡張することが可能となります。
■AWE を使用するための必須となる前提設定
AWE の使用有無に関しては、SQL Server で設定をするのですが、使用するためには必須となる設定があります。
それが [ローカル セキュリティ ポリシー] の設定です。
ローカル セキュリティ ポリシーで、[メモリ内のページのロック] という権限を SQL Server のサービス起動アカウントに付与する必要があります。
# 英語では、[Lock Pages in Memory] と呼ばれているものになります。
Lock Pages in Memory オプションを有効にする方法 (Windows)
初期設定ではこのポリシーにはどのユーザー / グループも設定はされていません。
SQL Server をローカルシステムで実行していると、ポリシーを設定していなくても AWE を使用することが出来たりするのですが、サービスの専用ユーザーを作成して SQL Server を実行している場合は、このポリシーにサービス用のユーザーを設定する必要があります。
AWE が正常に有効化されていると以下の SQL Server のログに以下のメッセージが表示されます。
Using locked pages in the memory manager. |
AWE が有効になっていない場合は以下のメッセージとなります。
Using conventional memory in the memory manager. |
■ログ以外で AWE が有効になっているかを確認
先ほどはログから AWE が有効になっているかを確認しましたが、他の方法でも確認することができます。
[DBCC MEMORY STATUS] を実行することで、AWE によりメモリが割り当ての情報を取得できます。
[Memory Manager] や他のセクションの情報から [AWE Allocated] を確認することで AWE によるメモリ割り当てが行われているかを確認することができます。
[AWE Allocated] に情報が出力されていますね。
AWE が有効になっていない、メモリ内のページのロックが有効になっていない場合は以下のような情報となります。
AWE が使われておらず、通常のメモリ割り当てが行われていますので、[VM Committed] としてメモリが割り当てられているのが確認できます。
ログから見ると実際に使われているかが不安になることがありますので、DBCC MEMORYSTATUS を実行して数値として確認をした方が安心かと思います。
ここまでの設定で AWE を知っている方ですと、[max server memory] と [m
in server memory] の設定は? と思われるかもしれません。
次の投稿でこの辺の設定が影響する、[動的メモリ] についてまとめていきたいと思います。