SE の雑記

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

Enzo SQL Baseline を使用した SQL Server / SQL Azure のベースライン作成

leave a comment

twitter でパスを受けたので軽くまとめてみたいと思います。

codeplex に SQL Server and SQL Azure Performance Testing: Enzo SQL Baseline というツールが公開されています。
image

今回の投稿ではこのツールの使い方を軽く見てみたいと思います。

ヘルプに関してはオンラインヘルプで提供されています。
Online Help

ちなみに私は英語が全然だめなので英語を読まずに感覚だけて使っていますので予めご了承ください。
# 英語のツールを使うときは [考えるな、感じろ!] をモットーに検証をしています。


■Enzo SQL Baseline をインストール


Enzo SQL Baseline を最低限動作させるためには [.NET Framework 3.5 SP1] が必要となります。
image

インストールされていない場合は、[Accept] をクリックすることでダウンロードすることが可能です。

今回は SQL Azure の検証用に構築していた Windows Server 2008 R2 + SQL Server 2008 R2 の環境にインストールをしてみたいと思います。
# .NET Framework 3.5 SP1 は SQL Server 2008 R2 のインストール前提のために導入済みとなっています。

  1. [setup.exe] を実行します。
    image
  2. [Next] をクリックします。
    image
  3. [I Agree] を選択して、[Next] をクリックします。
    image
  4. 今回は実行可能モジュールだけインストールしますので [Deploy Executable Files Only] を選択して、[Next] をクリックします。
    image
  5. [Next] をクリックします。
    image
  6. [Next] をクリックしてインストールを開始します。
    image
  7. [Close] をクリックします。
    image

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

スタートメニューに [Enzo SQL Baseline] が追加されています。

image
image

 

■SQL Server に接続


Enzo SQL Baseline は SQL Server (2005 以降に対応) / SQL Azure に単純なクエリや、ストアドプロシージャを実行してその応答時間を元にベースラインを作成するツールとなります。

まずは、SQL Server に対して接続してみたいと思います。

実行する前に、[File] の [Manage Connections] から接続情報を登録する必要があります。
image

今回は自身にインストールしている SQL Server に Windows 認証を使用して接続をします。
image

設定が正しいか [Test] をクリックして確認をし、
image

[Save] をクリックして接続情報を保存します。
# [C:Users<ログインユーザー名>Documents] (マイ ドキュメント) に保存しないと接続情報が選択できませんでした。
image

接続情報を保存したら [Search] をクリックします。
image

[マイ ドキュメント] を選択し [OK] をクリックすると、
# マイ ドキュメント内しか選べないみたいなのですよね。
image

接続先情報をプルダウンから選択できるようになります。
image

後はテストで使用するデータベースとSQL を入力して、[Start Test Run Execution] をクリックすると指定した SQL が SQL Server に対して実行されます。
image

以下が SQL Serve Profiler を使用して取得した情報になります。image

[Enzo Performance: #ENZO_BENCHMARK->0] / [Enzo Performance Gatherer] からクエリが実行されていることが確認できます。

実行した結果は、[Last Execution Results] から確認することができます。
image
image
image

実行時にエラーがあった場合はメニューの [Test Run] の [View Errors] がクリックできるようになり、エラーの内容が確認できます。
image
image

 

■SQL Azure に接続


Enzo SQL Baseline は SQL Azure に接続することも可能です。
SQL Azure では Windows 認証が使えませんので、ユーザー名とパスワードを指定して SQL Server 認証を使用します。
# SQL Azure 側で Firewall の設定をして、実行端末から接続できるようにすることも必要です。
image

あとは SQL Server に接続する場合と同じになります。

以降の記載に関しては SQL Server 2008 R2 に接続をして確認をしています。
# Profiler が使えた方がいろいろと便利なので。

 

■クエリを実行 (T-SQL Command)


[T-SQL Command] から、はクエリを直接入力して実行することが可能です。
image

T-SQL Command の実行状況は、SQL Profiler の [TSQL] [SQL:BatchCompleted] で確認することが可能です。
image

image

 

■クエリを実行 (RPC Call)


RPC Call で実行できるストアドプロシージャはユーザーストアドプロシージャのみとなるようです。
そのため、システムストアドプロシージャ (例:sp_configure) を実行することはできません。

今回はストアドプロシージャでデータを INSERT してみたいと思います。

テスト用に以下のテーブルを作成しました。

CREATE TABLE [dbo].[Table_1](
    [Col1] [uniqueidentifier] NOT NULL,
    [Col2] [datetime] NULL,
    [Col3] int NULL,
    [Col4] [nchar](1000) NULL,
CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED
([Col1] ASC))

ALTER TABLE [dbo].[Table_1] ADD  CONSTRAINT [DF_Table_1_Col2] 
DEFAULT (getdate()) FOR [Col2]
GO

テスト用のストアドプロシージャも作成します。

CREATE PROCEDURE USP_INSERT_Table_1
    @Col4 nchar(1000)
AS
BEGIN
    SET NOCOUNT ON;

    INSERT INTO Table_1 (Col1, Col3, Col4)
    VALUES (NEWID(),@@SPID, @Col4)
END
GO

実行するストアドプロシージャ名を入力して、[Fetch Parameters] をクリックすると対象のストアドプロシージャのパラメータを取得することができます。
# Add を使って手で入力することも可能です。
image

image

パラメーターをダブルクリックまたは、選択して Edit をクリックして、ストアドプロシージャのパラメーターを設定します。
image

RPC Call の実行状況は、SQL Profiler の [Stored Procedures] [RPC:Completed] で確認することが可能です。
image
image

 

■複数スレッドで実行


パフォーマンスを確認するときには複数のスレッドで実行をし、複数セッションで負荷をかける必要があります。

複数のスレッドで実行する場合は [Execute the same run] と [Parallel Execution] で調整をします。

この設定であれば単一のスレッドで 10 回実行されます。

image

image

 

複数のスレッドで実行する場合は以下のような設定をします。
image

image

 

このような設定ではクエリは 1 回しか実行されません。
image
image

100 スレッドで同実行 (厳密な同時ではないですが) というテストもできますね。
image

 

■事前実行クエリの設定


テスト実行前に何らかのクエリを実行しておきたい場合は以下の設定を使用します。
# キストボックスの左端に微妙にラベルがかぶってしまっています…。
image

 

各設定の実行のタイミングは下表のようになるようです。

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 を使う場合は癖がありそうですね。
image

 

■ベースラインの確認


実行した結果に関しては、[Last Execution Results] のタブで確認することが可能です。
image

全体の平均と各スレッドで実行した結果を確認することができます。

情報に関しては、[sys.dm_exec_sessions] から取得しているようです。
この DMV は SQL Azure でも使えますので実行先を意識しなくてもで SQL Server / SQL Azure の情報を取得することができそうですね。
# ソースはほとんど見ていないので実際に条件分岐していないかは確認できていないですが。
パフォーマンスは以下のクエリで取得しているようです。

SELECT
    session_id,
    host_name,
    cpu_time as CPU,
    memory_usage,
    total_scheduled_time, 
    total_elapsed_time as Duration,
    reads as physical_reads,
    writes as Writes,
    logical_reads as Reads, 
    row_count as [RowCount],
    last_request_start_time,
    last_request_end_time 
FROM
    sys.dm_exec_sessions
WHERE
    program_name = ‘Enzo Performance: #ENZO_BENCHMARK->xxxx’

 

コンパイルのクエリを考慮し、初回の実行だけパフォーマンスを測定したくないという場合には、[Execution Options] の [Prime Database (discard first run from results)] を有効にします。

以下の設定であれば、3 回クエリが実行されますが、
image

結果は二回分 (初回が結果に含まれていない) のみ測定されます。
image

 

■結果の比較


[Comparative Analysis] では結果の比較をすることができます。
初期の状態では比較元とするベースラインを選択することができません。
image

一度テストを実行すると、[Add last run to comparative analysis] のリンクがアクティブになります。
image

アクティブになったリンクをクリックすることで今回の測定結果をベースラインとして登録することができます。
image

後は複数回実行しながら、登録して比較するということを繰り返していくことになります。
image

 

■Excel にエクスポート


実行結果ですが、メニューの [Test Run] から Excel にエクスポートすることが可能です。
image

ただし、Excel がインストールされていない場合はエラーとなってしまいます。
image

Excel がインストールされている場合は以下のようにデータをエクスポートすることが可能です。

[Detailed Results]
image

[Comparative Results]
image

 

今までこのようなテストをするときは、RML Utility の OStress を使っていたのですが、  Enzo SQL Baseline の方が手軽にテストできそうですね。

Written by masayuki.ozawa

6月 12th, 2011 at 12:31 pm

No Responses to 'Enzo SQL Baseline を使用した SQL Server / SQL Azure のベースライン作成'

Subscribe to comments with RSS or TrackBack to 'Enzo SQL Baseline を使用した SQL Server / SQL Azure のベースライン作成'.

  1. […] Enzo SQL Baseline を使用した SQL Server / SQL Azure のベースライン作成 […]

Leave a Reply

*