SE の雑記

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

Archive for 12月 8th, 2010

SQL Server で WOW64 その 1

without comments

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 ,