はじめに
ちょっとDBに負荷をかけたくなり、JmeterでJDBCリクエストを投げることにしました。
備忘録として残しますので参考になれば幸いです。
Jmeter初心者ですので、用語は若干誤りがあるかもしれません。
やりたいこと
- 参照+更新のごく簡単なトランザクションを大量に投げたい
- 操作する行はある程度ランダムに分散させたい
前提
DBMSとしてDb2を使用します
設定内容
結果的に、以下のエレメントを準備しました。
以下で、各エレメントの設定内容を見ていきます。
テスト計画
基本デフォルトのままですが、Db2のJDBCドライバーが格納されているディレクトリをclasspathに追加しています。
スレッドグループ
設定内容
今回は5000秒の間、 100ユーザー×5000トランザクションの負荷をかけることにしました。
JDBC Connection Configuration
設定内容
「Variable Name for created pool」は何でもいいですが、後続の「JDBC Request」エレメントで同じ値をセットする必要がある点に注意が必要です。
トランザクションとして実行したいのでAuto CommitはFalseに変更しています。
JDBC driver classはDBMSに則したものを指定します。
JDBC Request
実際に投げるJDBCリクエスト(≒ SQL)を定義します。
今回はSELECT + UPDATE + COMMITからなるトランザクションを想定するため3つのエレメントを追加します。
設定内容(SELECT)
「Variable Name of Pool declared in JDBC Connection Configuration」には、「JDBC Connection」で指定したものと同じ。
バラバラな行を更新するため、Where句でパラメータマーカーを使用する。セットする値は後続の「ユーザーパラメータ」エレメントにて定義。
パラメータマーカーを使う参照処理のため、クエリータイプは「Prepared Select Statement」を使用する。
設定内容(UPDATE)
パラメータマーカーを使う更新処理のため、クエリータイプは「Prepared Update Statement」を使用する。
ユーザーパラメータ
スレッド毎に異なるパラメータをセットするために使用しました。(もしかすると、もっといい方法があるかもしれませんが。。。)
設定内容
JmeterにはStringFromFileという関数が用意されている。これを使うとファイルからパラメータを順に読み込んで使用してくれるため、スレッド毎に(疑似的に)ランダムなパラメータが使用できる。
ファイルはJmeterのbinフォルダに格納しておきます。
(参考)col1Value2.txtファイルの中身
以下のように1から昇順の値を格納した。
実機確認した限りでは、ファイルの最後まで読み込んだら先頭に戻りループする実装になっていると推測。
サマリーレポート
実行結果を表示するためのエレメントの一つで、リクエスト総数やスループットのような集計結果を表示できる
View Results Tree
実行結果を表示するためのエレメントの一つで、こちらはリクエスト個々の結果を表示できる。