twitter でパスを受けたので軽くまとめてみたいと思います。
codeplex に SQL Server and SQL Azure Performance Testing: Enzo SQL Baseline というツールが公開されています。
今回の投稿ではこのツールの使い方を軽く見てみたいと思います。
ヘルプに関してはオンラインヘルプで提供されています。
Online Help
ちなみに私は英語が全然だめなので英語を読まずに感覚だけて使っていますので予めご了承ください。
# 英語のツールを使うときは [考えるな、感じろ!] をモットーに検証をしています。
Contents
■Enzo SQL Baseline をインストール
Enzo SQL Baseline を最低限動作させるためには [.NET Framework 3.5 SP1] が必要となります。
インストールされていない場合は、[Accept] をクリックすることでダウンロードすることが可能です。
今回は SQL Azure の検証用に構築していた Windows Server 2008 R2 + SQL Server 2008 R2 の環境にインストールをしてみたいと思います。
# .NET Framework 3.5 SP1 は SQL Server 2008 R2 のインストール前提のために導入済みとなっています。
- [setup.exe] を実行します。
- [Next] をクリックします。
- [I Agree] を選択して、[Next] をクリックします。
- 今回は実行可能モジュールだけインストールしますので [Deploy Executable Files Only] を選択して、[Next] をクリックします。
- [Next] をクリックします。
- [Next] をクリックしてインストールを開始します。
- [Close] をクリックします。
以上でインストールは完了です。
スタートメニューに [Enzo SQL Baseline] が追加されています。
■SQL Server に接続
Enzo SQL Baseline は SQL Server (2005 以降に対応) / SQL Azure に単純なクエリや、ストアドプロシージャを実行してその応答時間を元にベースラインを作成するツールとなります。
まずは、SQL Server に対して接続してみたいと思います。
実行する前に、[File] の [Manage Connections] から接続情報を登録する必要があります。
今回は自身にインストールしている SQL Server に Windows 認証を使用して接続をします。
[Save] をクリックして接続情報を保存します。
# [C:Users<ログインユーザー名>Documents] (マイ ドキュメント) に保存しないと接続情報が選択できませんでした。
[マイ ドキュメント] を選択し [OK] をクリックすると、
# マイ ドキュメント内しか選べないみたいなのですよね。
後はテストで使用するデータベースとSQL を入力して、[Start Test Run Execution] をクリックすると指定した SQL が SQL Server に対して実行されます。
以下が SQL Serve Profiler を使用して取得した情報になります。
[Enzo Performance: #ENZO_BENCHMARK->0] / [Enzo Performance Gatherer] からクエリが実行されていることが確認できます。
実行した結果は、[Last Execution Results] から確認することができます。
実行時にエラーがあった場合はメニューの [Test Run] の [View Errors] がクリックできるようになり、エラーの内容が確認できます。
■SQL Azure に接続
Enzo SQL Baseline は SQL Azure に接続することも可能です。
SQL Azure では Windows 認証が使えませんので、ユーザー名とパスワードを指定して SQL Server 認証を使用します。
# SQL Azure 側で Firewall の設定をして、実行端末から接続できるようにすることも必要です。
あとは SQL Server に接続する場合と同じになります。
以降の記載に関しては SQL Server 2008 R2 に接続をして確認をしています。
# Profiler が使えた方がいろいろと便利なので。
■クエリを実行 (T-SQL Command)
[T-SQL Command] から、はクエリを直接入力して実行することが可能です。
T-SQL Command の実行状況は、SQL Profiler の [TSQL] [SQL:BatchCompleted] で確認することが可能です。
■クエリを実行 (RPC Call)
RPC Call で実行できるストアドプロシージャはユーザーストアドプロシージャのみとなるようです。
そのため、システムストアドプロシージャ (例:sp_configure) を実行することはできません。
今回はストアドプロシージャでデータを INSERT してみたいと思います。
テスト用に以下のテーブルを作成しました。
CREATE TABLE [dbo].[Table_1]( ALTER TABLE [dbo].[Table_1] ADD CONSTRAINT [DF_Table_1_Col2] |
テスト用のストアドプロシージャも作成します。
CREATE PROCEDURE USP_INSERT_Table_1 INSERT INTO Table_1 (Col1, Col3, Col4) |
実行するストアドプロシージャ名を入力して、[Fetch Parameters] をクリックすると対象のストアドプロシージャのパラメータを取得することができます。
# Add を使って手で入力することも可能です。
パラメーターをダブルクリックまたは、選択して Edit をクリックして、ストアドプロシージャのパラメーターを設定します。
RPC Call の実行状況は、SQL Profiler の [Stored Procedures] [RPC:Completed] で確認することが可能です。
■複数スレッドで実行
パフォーマンスを確認するときには複数のスレッドで実行をし、複数セッションで負荷をかける必要があります。
複数のスレッドで実行する場合は [Execute the same run] と [Parallel Execution] で調整をします。
この設定であれば単一のスレッドで 10 回実行されます。
100 スレッドで同実行 (厳密な同時ではないですが) というテストもできますね。
■事前実行クエリの設定
テスト実行前に何らかのクエリを実行しておきたい場合は以下の設定を使用します。
# キストボックスの左端に微妙にラベルがかぶってしまっています…。
各設定の実行のタイミングは下表のようになるようです。
Execute this command before the first run | テスト実行時の最初に一度のみ実行 |
Execute this command between runs | クエリの実行後に毎回実行 |
Execute this command after the last run | テストの実行時の最後に一度のみ実行 |
実行する内容ですが [T-SQL Command] の場合は、T-SQL / ストアドプロシージャ を実行できますが、[RPC Call] の場合はストアドプロシージャしか設定できないようです。
テストの最初の実行時に DELAY を入れたところ以下のエラーとなりました。
RPC Call を使う場合は癖がありそうですね。
■ベースラインの確認
実行した結果に関しては、[Last Execution Results] のタブで確認することが可能です。
全体の平均と各スレッドで実行した結果を確認することができます。
情報に関しては、[sys.dm_exec_sessions] から取得しているようです。
この DMV は SQL Azure でも使えますので実行先を意識しなくてもで SQL Server / SQL Azure の情報を取得することができそうですね。
# ソースはほとんど見ていないので実際に条件分岐していないかは確認できていないですが。
パフォーマンスは以下のクエリで取得しているようです。
SELECT |
コンパイルのクエリを考慮し、初回の実行だけパフォーマンスを測定したくないという場合には、[Execution Options] の [Prime Database (discard first run from results)] を有効にします。
結果は二回分 (初回が結果に含まれていない) のみ測定されます。
■結果の比較
[Comparative Analysis] では結果の比較をすることができます。
初期の状態では比較元とするベースラインを選択することができません。
一度テストを実行すると、[Add last run to comparative analysis] のリンクがアクティブになります。
アクティブになったリンクをクリックすることで今回の測定結果をベースラインとして登録することができます。
後は複数回実行しながら、登録して比較するということを繰り返していくことになります。
■Excel にエクスポート
実行結果ですが、メニューの [Test Run] から Excel にエクスポートすることが可能です。
ただし、Excel がインストールされていない場合はエラーとなってしまいます。
Excel がインストールされている場合は以下のようにデータをエクスポートすることが可能です。
今までこのようなテストをするときは、RML Utility の OStress を使っていたのですが、 Enzo SQL Baseline の方が手軽にテストできそうですね。
[…] Enzo SQL Baseline を使用した SQL Server / SQL Azure のベースライン作成 […]
Enzo SQL Baseline を使用したベースラインの比較 « SE の雑記
12 6月 11 at 18:56