SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Archive for the ‘WOW64’ tag

SQL Server で WOW64 その 2

leave a comment

前回の投稿でパフォーマンスモニタのログが取得できるようになりましたので、WOW64 のメモリの使用状況を確認していきたいと思います。

WOW64 を使用していない環境 (32bit 環境) では SQL Server のメモリ使用状況は以下のようになります。

■/3GB なし
image

■/3GB あり
image

/3GB なしで 1.6GB ,/3GB ありで 2.6GB のメモリが使用できています。

 

それでは、WOW64 で動作している SQL Server 2008 R2 / Denali で同様の情報を取得してみます。

■SQL Server 2008 R2
image

■Denali
image

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 を有効にした場合どうなるかも合わせて試してみました。

■SQL Server 2008 R2 (AWE)
image

■Denali (AWE)
image

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 のエンジニアの端くれなので、診断で環境を見たことはあるのですが自分でデータをとってまとめるという機会がなかったので、今回の投稿はよい機会でした~。

Written by masayuki.ozawa

12月 11th, 2010 at 2:37 pm

Posted in SQL Server

Tagged with , ,

SQL Server で WOW64 その 1

leave a comment

SQL Server を WOW64 で動かした時のメモリの使用状況について少しまとめていきたいと思います。
パフォーマンス モニタでメモリの情報を取得しようとして結構はまったので、その 1 として WOW64 で SQL Server を実行した場合の情報取得につて書いていきたいと思います。

64bit OS では SQL Server を WOW64 (Windows 32-bit on Windows 64-bit) でインストールすることが可能です。

64bit OS で SQL Server をインストールしようとすると通常は 64bit の SQL Server がインストールされます。
インストール時に [Options] から [Processor Type] を [x86] に設定することで WOW64 で SQL Server をインストールすることができます。
image

WOW64 の SQL Server のインストールではインストールする機能の選択画面では、両方の [Program Files] が表示されますが、
image

データベースのルートディレクトリの選択では、[Instance root directory] が [Program Files (x86)] に設定がされます。
image

後のインストールは x64 の SQL Server と同じです。

タスクマネージャーを確認すると [*32] となっていますので、WOW64 で実行されているのが確認できます。
image

それではパフォーマンスモニタでメモリの情報を取得してみたいと思います。
image

MSSQL~ のカウンターが無いですね…。
Process では、[sqlservr.exe] の情報を取得することが可能なのですが。
image

WOW64 の SQL Server の場合は、32bit のパフォーマンスモニタを起動して情報を取得します。
32bit のパフォーマンスモニタを起動するためには、[C:WindowsSysWOW64perfmon.exe] を実行します。
# [mmc /32 perfmon.msc] でも起動することが可能です。

32bit のパフォーマンスモニタを起動すると SQL Server のカウンターを取得することができます。
image

それでは、WOW64 上の SQL Server のメモリ情報を取得してみたいと思います。
まずは SQL Server 2008 R2 で試してみました。

image

取得したログに SQL Server のカウンターが無いですね…。

ログの取得対象として SQL Server のカウンターは設定されています。
image

[Relog] コマンドを使って、取得したパフォーマンスモニタのログからカウンターを取得してみたいと思います。
Relog コマンドには [-q] オプションがあり、このオプションを使用するとログに含まれるカウンターの情報を取得することが可能です。

>relog c:PerfLogsAdminPerformanceWIN-KLC3RJ46I7R_20101208-000007DataCollector01.blg -q

入力
—————-
ファイル:
     c:PerfLogsAdminPerformanceWIN-KLC3RJ46I7R_20101208-000007DataCollector
01.blg (バイナリ)

開始:           2010/12/8 7:48:09
終了:           2010/12/8 7:52:24
サンプル:       251

\WIN-KLC3RJ46I7RMemoryAvailable KBytes

コマンドは、正しく完了しました。

ログから追加できるカウンターに表示されていないという事ではなく、ログ自体に含まれていない (取得されていない) ことが確認できます。

WOW64 のパフォーマンスモニタのログ取得について調べていたところ、SQL Server でとても参考になるサイトが二つ見つかりました。
SQL Server Wow64 Perfmon Issues
How It Works: Almost Everything You Wanted To Know About The SQL Server (2005, 2008) Performance Counter Collection Components

最初のブログは WIndows Server 2003 がベースとなっています。
Performance Log and Alerts のサービスで使用する exe を レジストリを変更してWOW64 のものに差し替えて取得するという方法が紹介されています。

image
image

2008 以降はパフォーマンスモニタのサービスは [svchost.exe] 経由になっているのですが、これを [SysWow64] のものにすれば取得できるというわけでもないので残念ながらこの方法では取得できず…。
image

2 つめのサイトでは 64bit の SQL Server のカウンターのライブラリ DLL を [system32] にコピーするという方法が紹介されています。

SQL Server のパフォーマンスモニタのカウンターですがサービス毎に、ライブラリの DLL が個別に設定されています。
# 使用している DLL 名は HKLM のサービスのレジストリの [Library] から確認することができます。
image

同一バージョンの 64bit の SQL Server から、カウンターのライブラリ DLL をコピーし、ファイル名を上記で確認した DLL 名と同一にして、[C:WindowsSystem32] にコピーをして再度ログの取得を試してみました。
image

>relog c:PerfLogsAdminPerformanceWIN-KLC3RJ46I7R_20101209-000009DataCollector01.blg -q

入力
—————-
ファイル:
     c:PerfLogsAdminPerformanceWIN-KLC3RJ46I7R_20101209-000009DataCollector
01.blg (バイナリ)

開始:           2010/12/9 22:28:06
終了:           2010/12/9 22:28:44
サンプル:       39

\WIN-KLC3RJ46I7RMSSQL$DENALIX86:Plan Cache(_Total)Cache Pages
\WIN-KLC3RJ46I7RMSSQL$DENALIX86:Buffer ManagerDatabase pages
\WIN-KLC3RJ46I7RMSSQL$SQL2008R2X86:Plan Cache(_Total)Cache Pages
\WIN-KLC3RJ46I7RMSSQL$SQL2008R2X86:Buffer ManagerDatabase pages
\WIN-KLC3RJ46I7RMemoryAvailable KBytes

コマンドは、正しく完了しました。

 

2008R2 と Denali の情報を取得してみたのですが両方ともログが取れていますね。
パフォーマンスモニタのログも取得できています。
image

この方法でログを取得することができるのですが [非サポート] になるようですので注意が必要です。

非サポートではありますがひとまず、ログの取得はできました。

WOW64 で SQL Server を実行した際のメモリ利用については次の投稿でまとめたいと思います。

Written by masayuki.ozawa

12月 8th, 2010 at 12:27 am

Posted in SQL Server

Tagged with ,