Top 5 Announcements at PASS Summit 2016 / Technical Preview: Database Experimentation Assistant でアナウンスされていますが、SQL Server の A/B テストを実施するためのソリューションである、MicrosoftR Database Experimentation Assistant Technical Preview (DEA) がリリースされました。
このツールですが、英語版の環境であれば、問題はなく動作するかと思いますが、日本語の環境でどうさせる場合はいろいろと注意することがありますので軽く紹介を。
このツールは、以下を実行するためのツールとなります。
- キャプチャ
- ソースとなる環境で、実行されているクエリのトレースを取得
- 再生
- ターゲットとなる環境で、上記で取得したトレースを「分散再生コントローラー」「分散再生クライアント」で再生し、ターゲットでの実行状況のトレースを取得
- 解析
- ソース / ターゲットで取得したトレースを比較し、実行時間の比較等のレポートを出力
キャプチャについては特に問題なく取得ができます。
再生には分散再生コントローラーと分散再生クライアントが必要となり、DCOM (DReplayController) のセキュリティ設定が必要となりますので、これについては、 Database Experimentation Assistant ? Replay Trace を確認しながら設定を行います。
分散再生の設定をきちんと実施して、再生を行おうとしても日本語の環境では、設定が行われていても「Invalid DReplay setup. Please make sure the controller and the client machines are setup correctly and try again.」のエラーが発生するかと思います。
この現象ですが、英語版以外の問題のようです。
再生をする際には、コントローラーの「C:\temp\stauts.log」にログを出力しているのですが、日本語の場合は、以下のようなログが出力されます。
2016-10-29 16:44:15:948 Info DReplay 登録済みクライアント: 2016-10-29 16:44:15:956 Info DReplay NUC-01(状態 = READY) 2016-10-29 16:44:15:958 Info DReplay コントローラー "localhost" は準備完了の状態です。
再生をする際には、「C:\temp\status.log」に「Registered clients:」の文言が出力されているかの確認が行われています。
そのため、英語版以外では、正常な文字列がログに出力されていないと認識されてしまい、再生を行うことができません。
日本語版で実行したい場合には、「C:\Program Files (x86)\Microsoft SQL Server\130\Tools\Binn\ja\DReplay.Resources.dll」をリネームする等で、日本語のリソースの登録を外し、英語のメッセージが表示されるようにする必要があります。
これで、再生が可能となります。
再生を行いトレースが取得された後は解析をするのですが、ここでも英語版以外の特有の問題が発生します。
解析をする際には SQL Server に接続し、データをインポートして解析をするのですが、その際には、「C:\Program Files\Microsoft Corporation\Database Experimentation Assistant\ExperimentationDatabase.dacpac」をインポートしてベースとなる DB を作成し、データの取り込みを行います。
この dacpac ですが、英語環境以外でインポートをすると、「C:\Users\<実行ユーザー>\AppData\Local\Temp\3\DEA」内のログに以下のようなエラーが出力されます。
Warning SQL72030: プロジェクト データベースとターゲット データベースの照合順序設定が異なるため、配置エラーが発生する可能性があります。 Error SQL72014: .Net SqlClient Data Provider: メッセージ 241、レベル 16、状態 1、行 13 文字列から日付と時刻、またはそのいずれかへの変換中に、変換が失敗しました。 Error SQL72045: スクリプトの実行エラーです。実行されたスクリプト: INSERT INTO [dbo].[SQLServerBuilds] (ProductName, BuildNumber, ReleaseDate, ServicePackRTM, CumulativeUpdateNumberSecurityId) VALUES (N'SQL Server 2005', N'9.00.5324', '9-Oct-2012', N'SP4', N'MS12-070'), (N'SQL Server 2005', N'9.00.5292', '14-Jun-2011', N'SP4', N'MS11-049'), (N'SQL Server 2005', N'9.00.5266', '22-Mar-2011', N'SP4', N'CU3'), (N'SQL Server 2005', N'9.00.5259', '21-Feb-2010', N'SP4', N'CU2'), (N'SQL Server 2005', N'9.00.5254', '23-Dec-2010', N'SP4', N'CU1'), (N'SQL Server 2005', N'9.00.5069', '9-Oct-2012', N'SP4', N'MS12-070'), (N'SQL Server 2005', N'9.00.5057', '14-Jun-2011', N'SP4', N'MS11-049'), (N'SQL Server 2005', N'9.00.5000', '16-Dec-2010', NULL, NULL), (N'SQL Server 2005', N'9.00.4340', '14-Jun-2011', N'SP3', N'MS11-049'), (N'SQL Server 2005', N'9.00.4325', '22-Mar-2011', N'SP3', N'CU15'), (N'SQL Server 2005', N'9.00.4317', '21-Feb-2011', N'SP3', N'CU14'), (N'SQL Server 2005', N'9.00.4315', '20-Dec-2010', N'SP3', N'CU13'), (N'SQL Server 2005', N
日付の形式に英語の月名が指定されており、日本語環境の SQL Server の通常のユーザーでインポートしようとするとエラーとなります。
これの回避としては、 DEA を実行しているユーザーの SQL Server のログインの既定の言語を「English」に設定します。
これにより、デフォルトが以下相当になりますので、英語の言語設定となります。
SET LANGUAGE us_english; GO
これで、以下のように比較のレポートを作成するところまで、動作させることができるかと。