SE の雑記

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

JMeter で SQL Server の負荷テスト

leave a comment

負荷テストを実施する際に Apache License で公開されている JMeter を使うことがあるかと思います。

Web アプリケーションの負荷テストについては
JMeterでWebアプリケーションのパフォーマンス測定を行う
JMeter で ASP.NET アプリケーションの負荷テストを実施してみる ~その 1 ASP.NET MVC の基礎編~

で紹介されていますが SQL Server 単体に対して、JMeter で負荷テストをするための方法は日本語ではあまり見かけなかったので少しまとめてみたいと思います。

なお、本投稿は、
SQL query performance test with JMeter
Load Testing Relational Databases With JMeter
を参考にさせていただいています。

■JMeter のインストール


JMeter は Java のアプリケーションですので、負荷をかけるクライアントとなる端末には Java のランタイム (JRE) をインストールする必要があります。

私は Java Standard Edition 7 の JRE をインストールし JMeter を実行しました。
Java のランタイムは こちら から入手することが可能です。
# 今回は、JRE 7 u13 の x64 をインストールしています。

今まで気づかなかったのですが、今の JRE のインストーラーは C:windowssystem32 配下に java.exe / javaw.exe / javaws.exe をコピーしているようで環境変数の PATH に java.exe までのパスを通さなくても実行できるようなのですが、必要に応じて java.exe までのパス (デフォルトでは C:Program FilesJavajre7bin) を設定します。
# JAVA_HOME に関しては使っていないようですので設定しなくても大丈夫でした。

image

環境変数周りに関しては PATHの設定及び環境変数JAVA_HOMEの設定 が参考になります。

JRE のインストールが終わったら JMeter をダウロードします。
[Download Release] をクリックすると JMeter のダウンロード先のリンクが表示されます。
JMeter はバイナリ版が提供されていますので、今回はこちらの ZIP をダウンロードしています。
image

ダウロードしたファイルはプロパティを開いて [ブロックの解除] をしておくとよいかと。
image

JMeter はインストーラーはなく展開したファイルをそのまま利用することになりますので、適当なディレクトリに展開し、[bin] の下の [jmeter.bat] をクリックして起動します。
image

下のような画面が起動すれば、JRE のインストールも含め JMeter の導入は完了です。

image

 

■JDBC Driver のインストール


JMeter から任意の RDBMS に接続することができるのですが、Java のアプリケーションですので接続は JDBC 経由で行います。

SQL Server の JDBC は以下からダウンロードすることができます。
Microsoft JDBC Driver 4.0 for SQL Server

ダウロードしたファイルを展開すると以下のファイルがあります。
image

今回は sqljdbc4.jar が必要になりますので、このファイルを JMeter の lib に配置します。
これで JDBC 経由で SQL Server に接続することが可能になります。

SQL Server の JDBC を使用する際の注意点として、統合セキュリティ (integratedSecurity) を使用して SQL Server に接続をする場合は、もう一つ作業をする必要があります。
接続 URL の構築 に書かれているのですが、統合セキュリティを使用して Windows 認証をする場合には、[sqljdbc_auth.dll] を適切なフォルダに格納する必要があります。
今回はこのファイルを [C:WindowsSystem32] に格納しています。

この設定をしておかないと、

com.microsoft.sqlserver.jdbc.SQLServerException: このドライバーは、統合認証を行えるようには構成されていません。

 

というエラーとなり、Windows 認証を使用して SQL Server に接続することができません。
# SQL Server 認証に関しては sqljdbc_auth を使わなくてもできるようですが。

 

■JMeter で SQL Server にクエリを実行


ここまでの作業が完了したら JMeter で SQL Server にクエリを実行できるように設定をします。
jmeter.bat を実行して JMeter を起動します。

最初に JDBC の設定をします。
テスト計画を右クリックして [追加] → [設定エレメント] → [JDBC Connection Configuration] をクリックします。
image

今回は Windows 認証を使用して SQL Server に接続をしますので以下の項目を入力します。
image

Variable Name 設定の名称。テストをする際にどの接続を使用するかを識別するための名称
Database URL JDBC の接続文字

jdbc:sqlserver://localhostSQL2012;databaseName=master;integratedSecurity=true;

JDBC Driver class JDBC のクラス

com.microsoft.sqlserver.jdbc.SQLServerDriver

次のこの接続を使用してストレステストを実行できるようにクエリを作成します。
[追加] → [Threads (Users)] → [setUpThread Group] をクリックします。
image

ここで、スレッド数や実行回数を設定します。
image

スレッド数を設定したら、実行するクエリを指定します。
スレッドに対して実行するクエリを指定しますので、作成した setUp Thread Group を右クリックして、[追加] → [サンプラー] → [JDBC Request] をクリックします。
image

今回は単純なクエリを実行しますので以下のような設定をします。
今回はパラメーターは使用していないため、接続に使用する情報と実行したいクエリを指定しています。
image

Variable Name 使用したい JDBC Connection Configuration の Variable Name
SQL Query 実行したいクエリ

設定に関しては以上で完了ですが、このままでは実行状態やエラーの情報がわかりませんので、テスト計画を右クリックして [追加] → [リスナー] → [統計レポート] をクリックします。
# 他のリスナーでもよいかもしれませんが。
image

統計レポートは以下のような設定になります。
[ファイル名] でログファイルを出力するようにしておくと、エラーの発生時にエラー内容をつかみやすい、後で結果を再確認することができますのでログを出力するようにしておくとよいかと思います。

image

設定が一通り終わったらテスト計画を保存して [実行] → [開始] をクリックします。
image

実行後に統計レポートの Error がカウントされていなければ正常に実行されています。
image

最初のうちは、SQL Server Profiler を設定して実行されているかを確認しておくとよいかもしれないですね。
[SQL:BatchCompleted] 等をキャプチャすれば稼働状況が確認できます。
デフォルトですと ApplicationName が [Microsoft JDBC Driver for SQL Server] となっているのでここで判断できると思います。
image

ApplicationName はリソースガバナーの制御としても使えますので、クエリ単位で制御をしたい場合には、JDBC の接続文字列を [jdbc:sqlserver://localhostSQL2012;databaseName=master;integratedSecurity=true;ApplicationName=JMeter Request #1;] というように設定すると、アプリケーション名が設定できますのでこの辺りを使用するとよいかと。
image

複数のクエリを実行したい場合には、JDBC Request を以下のようにせってすると順番にクエリを実行することができます。

image

こちらが複数のスレッド (2 スレッド) で実行した際の実行結果となります。
複数のスレッドで実行しても厳密に同時に実行されるということではないようですね。

image

同時に複数の種類のクエリを実行したい場合などは、以下のように設定するとよさそうですね。
image

image

グラフ表示などをすることもできますのでこの辺も有効に使うとよさそうです。
image

パラメーターを使用したクエリの実行については Load Testing Relational Databases With JMeter で紹介されていますのでこちらを参考にするとできそうです。

単一クエリの負荷ツールはいくつか使っていたのですが、JMeter で実行するとテストの幅が広くなりそうですね。

Written by masayuki.ozawa

2月 2nd, 2013 at 11:06 am

Posted in SQL Server

Tagged with ,

Leave a Reply

*