前回の投稿でパフォーマンスモニタのログが取得できるようになりましたので、WOW64 のメモリの使用状況を確認していきたいと思います。
WOW64 を使用していない環境 (32bit 環境) では SQL Server のメモリ使用状況は以下のようになります。
/3GB なしで 1.6GB ,/3GB ありで 2.6GB のメモリが使用できています。
それでは、WOW64 で動作している SQL Server 2008 R2 / Denali で同様の情報を取得してみます。
WOW64 のアプリケーションの場合、ユーザーモードの領域は 4GB 使用することができます。
そのため、32bit の SQL Server ではありますが、2GB 以上のメモリを使用することが可能です。
# 64bit の OS のため、/3GB スイッチも設定はないですし。
SQL Server 2008 R2 と Denali の WOW64 のメモリ使用状況を比較すると、プランキャッシュの上限に少し差が出ているようでした。
SQL Server 2008 R2 では、プランキャッシュが 1.5GB 程確保できているのですが、Denali では、1GB で頭打ちとなっています。
データとプランで使用しているメモリ合計については両バージョン共に 3.5GB となっているので、WOW64 で使用できるメモリの上限は共に同じになっていることが確認できます。
# 32bit / 64bit 共に、ユーザーモードのメモリ空間をフルには使えないみたいですね。32bit の場合は、1.6GB ぐらいで頭打ちになりますし。この辺はどうしてこのようになるのかをきちんと勉強したいと思います。
参考ではありますが、WOW64 を使用した場合のメモリについては以下の技術情報に記載がされています。
メモリ アーキテクチャ
WOW64 で AWE を有効にした場合どうなるかも合わせて試してみました。
WOW64 + AWE を使用すると、4GB をフルに使用することができていますね。
# WOW64 + AWE で動作させても変わらないんだろうな~と思っていたので、ちょっと意外でした。
ただし、AWE を使用しても 4GB 以上のメモリを使用することはできていません。
また、AWE を使用することで、設定前と比較して400MB 程度使用可能なメモリが増えているのですが、この増加分はデータベースキャッシュに割り当てられており、プランキャッシュに関しては、1.5GB から変化していません。
このあたりの動きは通常の AWE と同様になるようですね。
現状、Denali では、AWE はサポートしていませんので、AWE を有効にしてもメモリのトレンドは変わりません。
AWE と WOW64 について、数回に分けて投稿してきましたがその検証で取得した値を表にしてみました。
# 数値は SQL Server 2008 R2 のものとなっており、() 内は Denali の値になります。
データベースキャッシュ(最大) | プランキャッシュ (最大) | 利用メモリ (メモリ6 GB 搭載時) | |
/3GB なし | 1.0 GB (1.0 GB) | 900 MB (700 MB) | 1.6 GB (1.5GB) |
/3GB あり | 1.5 GB (1.5 GB) | 1.5 GB (1.2GB) | 2.6 GB (2.5 GB) |
AWE | 4.1 GB (1.0 GB) | 850 MB (700 MB) | 4.2 GB (1.5GB) |
AWE + /3GB | 4.0 GB (1.5 GB) | 1.4 GB (1.2GB) | 4.1 GB (2.5 GB) |
WOW64 | 3.0 GB (3.0 GB) | 1.6 GB (1.0 GB) | 3.5 GB (3.5 GB) |
WOW64 + /3GB | 4.0 GB (3.0 GB) | 1.6 GB(1.0 GB) | 4.0 GB (3.5 GB) |
# これらの値はあくまでも参考値ですので、環境によって変化します。
SQL Server のエンジニアの端くれなので、診断で環境を見たことはあるのですが自分でデータをとってまとめるという機会がなかったので、今回の投稿はよい機会でした~。