SE の雑記

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

SQL Server 2012 CTP3 の Distributed Replay を試してみました

leave a comment

SQL Server 2012 CTP3 には Distributed Replay というトレースファイルを使用した、複数端末でのワークロード再生機能が追加されています。
SQL Server Profiler からトレースファイルの再生が可能だったのですが、一台の端末からの再生となっていました。
通常、トレースファイルの結果には、複数の端末から実行された結果が含まれていると思います。
Distributed Replay を使用することでトレースファイルの中に含まれている複数の端末からのクエリの実行結果を、1 台からではなく、複数の端末から実行することが可能となります。
# トレースファイルに一つの端末からの実行結果しかない場合、複数の端末から実行することはできないようです。複数の端末から実行されたトレースの結果を、複数の端末で分散させて再生させるための機能が Distributed Replay となるようです。

 

自習書や以下の技術文書で情報が公開されています。
SQL Server "Denali" CTP3 新機能ダイジェスト
SQL Server Distributed Replay
Distributed Replay のインストール
Installing Distributed Replay

今まであったツールで近い (かな??) のは、RML Utilities でしょうか。
RML Utilities for SQL Server (x64)
RML Utilities for SQL Server (x86)

■Distributed Replay とは


Distributed Replay は SQL Server のインストーラーで追加できる機能となっています。
image

コンポーネントとしては、Controller と Client の 2 種類で構成されています。

Controller は Client を制御するために使用され、SQL Server へのワークロードは Client を介して実行されます。
SQL Server Distributed Replay に記載されている図がわかり易いですね。
Distributed Replay のインストール (セットアップ) によると Client は最大 16 台使用することができるようです。

image

GUI のツールは用意されておらず、コマンドで管理することになります。
設定に関しては構成ファイルの XML を手動でメンテナンスすることで実施します。

それでは、各コンポーネントのインストールを見ていきたいと思います。
インストールの詳細に関しては Distributed Replay のインストール に記載されています。

 

■Distributed Replay Controller のインストール


Distributed Replay Controller を選択してインストールを行います。
image

 

Controller はサービスとしてインストールされます。
デフォルトの状態では、サービスアカウントを使用して手動で実行されるようにサービスが構成されます。
image

Distributed Replay Utility Security によると、Controller のサービスはドメインユーザーを設定することになるようです。
また、ローカルの Administrators グループに所属していることが推奨されるようです。

ミラーアカウントを使用してパススルーできるかもしれませんが、ドメイン環境で使用することを基本として考えた方が良さそうですね。
# 一台で Controller と Client を兼用する場合はローカルアカウントでも実行できるような気がします。(未検証)

今回はドメインユーザーを使用して自動実行するように変更しています。
# Administrators グループに所属させています。
image

次の画面では、Distributed Replay Controller へ接続を許可するアカウントを指定します。
Distributed Replay Client のサービスアカウントを指定することになるようです。
# Client が Controller への接続を許可するために使用するセキュリティ設定となるようです。

今回は、ドメインユーザーを指定しています。
# このドメインユーザーを Client インストール時のサービスアカウントとして設定します。
image
この設定ですが DCOM のセキュリティ設定として使用されるようです。
Controller および Client のサービス アカウントの変更

インストール後に、dcomcnfg.exe を実行して、DReplayController のセキュリティ設定を確認してみます。
image
セキュリティタブの各設定に指定したアカウントが設定されています。
image
Client からの接続アカウントのメンテナンスを行う場合は、この設定を変更することで対応ができるようです。

Controller のインストールの設定は以上で終了です。

■Distributed Replay Client のインストール


次にクライアントのインストールを見てみます。

クライアントのインストールは Distributed Replay Client を選択します。
image

Client もサービスとしてインストールされます。
こちらもデフォルトの状態ではサービスアカウントでアカウント名が設定されています。
image

Controller 同様、こちらもドメインユーザー / ローカルの Administrators を設定することになるようです。
今回は Controller と同様の設定をしています。
image

次の画面で Client の設定を行います。
コントローラーとディレクトリを指定するのですが、この設定は後から変更することは可能です。
今回は Controller + Client の環境としているので、コントローラー名には localhost を設定しています。
image

インストール後に設定を変更する場合、DReplayClient.config を修正することで変更できます。
Configure Distributed Replay

このファイルは x64 の場合、[C:Program Files (x86)Microsoft SQL Server110ToolsDReplayClient] にあります。
# x86 の場合は、Program Files になります。
image

以上でインストールは完了です。

■インストール後の設定


インストールが完了したらインストール後の設定を行います。
インストール後の手順の実行

インストール後の設定としてファイアウォールの設定と、負荷を書ける対象の SQL Server の権限設定があります。

ファイアウォールの設定は Controller と Client それぞれで行います。
# %InstallPath% はインストール先を指定します。

– Controller –

netsh advfirewall firewall add rule name="allow dreplay controller" dir=in program="%InstallPath%DReplayControllerDReplayController.exe" action=allow

– Client –

netsh advfirewall firewall add rule name="allow dreplay client" dir=in program="%InstallPath%DReplayClientDReplayClient.exe" action=allow

SQL Server の権限設定ですが、Client から SQL Server に接続をするための設定となります。
実行時には、SQL Server Distributed Replay Client から SQL Server に接続を行うため、このサービスアカウントが SQL Server に接続をできるようにします。
# Distributed Replay での接続は Client のサービスアカウントを使用した Windows 認証となるようです。

対象サーバーで各クライアントの権限を与える: クライアント コンピューターへのクライアント サービスのインストールが完了したら、SQL Server の対象インスタンスの sysadmin ロールにクライアント サービス アカウントを手動で追加する必要があります。

とありますので、サービスアカウントに sysadmin の権限を付与しておきます。
image
image

以上で設定は完了です。

 

■再生可能なトレースの作成


Distributed Replay で再生可能なトレースを作成します。

ベースとなるトレースに関しては SQL Server Profiler で取得します。

トレースに関しては、[TSQL_Replay] のテンプレートを使うのが簡単なようです。
# 手動で設定もできると思います。
Distributed Replay Requirements

image

トレースをファイル (.trc) に取得したら、再生可能な形式に変換します。
再生可能な形式への変換は dreplay.exe で行います。
Preprocess Option (Distributed Replay Administration Tool)

cd "C:Program Files (x86)Microsoft SQL Server110ToolsBinn"
dreplay.exe preprocess -i c:tempProfilerTrace.trc -d c:temp

# デフォルトで作成されている構成ファイルを引数なしで読むために dreplay の格納されているディレクトリに移動しています。-c を設定して構成ファイルを読み込ませても実行できます。

コマンドプロンプトから dreplay の実行ですが、Controller の DCOM にアクセスできるアカウントで実行する必要があります。
コマンドを実行するアカウントが DCOM への適切なセキュリティ設定が付与されていない場合、以下のエラーになります。
# Administrator であっても、Controller への DCOM のセキュリティ設定は登録されていませんので注意が必要です。

image

正常に実行できた場合は以下のようにメッセージが表示され、[ReplayEvents.irf] と [TraceStats.xml] が作成されます。
image
image

 

これで再生のための準備は整いました。それでは実際に実行してみたいと思います。

 

■ワークロードの実行


それでは実際に実行してみます。
ワークロードの実行には dreplay.exe を replay オプションを指定して実行します。
Replay Option (Distributed Replay Administration Tool)

cd "C:Program Files (x86)Microsoft SQL Server110ToolsBinn"
dreplay.exe replay -d c:temp -o -w "AlwaysOn-AD" -s "AlwaysOn-AD"

# -w と -s の設定として、localhost や . は使えないようなので、サーバー名を明記します。

image

こちらが再生を行った際に取得した Profiler のトレースになります。
image

再生されているのが確認できますね。

複数の端末 (Client) から実行する場合は以下のようなコマンドになります。

dreplay.exe replay -d c:temp -o -w "AlwaysOn-AD","AlwaysOn-01" -s "AlwaysOn-AD"

image

先ほどと同じワークロードを実行したのですが、複数の端末から実行されているのが確認できます。

 

実行の結果やログに関しては Client のインストール時に指定した、結果ディレクトリとクライアントのプログラムが入っているフォルダの Log に出力がされます。
image

今で、トレースファイルを使用した複数端末での並列再生をする場合、一つのトレースファイルを分割して、複数の端末に配置して、再生をする必要があったと思うのですが、同じファイルを使用して並列で実行できるようになるとテスト時の手間を省くことができそうですね。

構成ファイルを変更することでいろいろな設定ができそうですのでまだまだ勉強することがたくさんです!!

Written by masayuki.ozawa

11月 4th, 2011 at 1:04 am

Posted in SQL Server

Tagged with , ,

Leave a Reply

*