Oracle Databaseの負荷テスト

JMeter(5.4.1)を使用したOracle Database(19.3.0)の負荷テストについて記載します。
JMeterは便利なのですが、JAVAで複雑な処理を実施しているとテスト実行時に実処理が起動しない場合があります。
例えば、Web→AP→DBの三層構造でWebサーバから検索を実施してもDBサーバで検索は実施されず、DBサーバに負荷が掛からないことがあります。JMeterのHTTPリクエストはHTTPアクセスコード200番を受け取ると成功になることが理由です。

上記の理由で1万件の検索クエリを同時実行した場合のDBサーバの負荷を確かめる要件が発生したため手順を検証しました。
JMeterモジュールは実行するPCでzipから解凍することをお勧めします。他のPCで起動経験があるフォルダをコピーしてくると起動時に「UNC パスはサポートされません。Windows ディレクトリを既定で使用します。」とメッセセージが出ます。エラーではないのですが、これが原因なのかJDBCドライバが読み込まれ無いような事象が発生しました。JDBCドライバやプロジェクトファイルのコピーに関しては問題はないです。

ApacheのページからJMeterをダウンロードします。
2021年7月時点で最新の5.4.1を使用します。Windowsで使うのでzip版をダウロードします。大きいので時間がかかります。

ダウンロードしたzipファイルを解凍します。これも意外と時間がかかりますので7zip等OS標準ではないツールをお勧めします。JMeterはインストールする必要が無いので、適当な場所に配置して大丈夫ですが、C:¥などアクセス権が面倒な場所は避けた方が無難です。

最初にJDBCでOracle Databaseにアクセスするために、OracleからJDBCドライバファイルをダウンロードし、JMeterのlibフォルダにコピーします(Oracle Database JDBCダウンロードで検索するとたどり着けるかと思います)。ojdbc8.jarやojdbc10.jarファイルになります。今回はojdbc8.jarを使用しました。
JDBCドライバを読み込んだ状態でJMeterを起動させるには、コピー後にJMeterを起動してください。

JMeter5.4.1フォルダ構成

apache-jmeter-5.4.1\binにあるJMeter.batでJMeterを起動します。
画面を日本語化することは可能ですが、WebやyoutsubeでJMeterを検索すると英語圏のものが多いので個人的にはデフォルトの英語表記で使用しています。
画面が同じだと安心します。

下記のようなテスト計画を作成します。
作成手順は割愛します。

設定が必要なのは、「JDBC Connection Configration」と「JDBC Request」になります。
「JDBC Connection Configration」でOracle Databaseの接続に必要なパラーメータを設定して、「JDBC Request」で実際のクエリを指定する感じです。

JDBC Connection Configrationの指定箇所は下図の赤枠部分です。
Variable Name for created poolは適当な名前を付けます。この名前は「JDBC Request」でも使用します。
Validation Queryでクエリタイプを指定します。
Database Connection Configurationを指定します。
Database URLはThinを使用してjdbc:oracle:thin:@db-ora:1521:orclとしています(Oracle JDBC接続で検索すると必要な表記が見つかると思います)。
ここでは、jdbc:oracle:thin:@サーバ名:1521:Oracle SID名で接続しています。
JDBC Driver ClassはOracleを指定してください。
UsernameとPasswordはOracle Databaseに接続可能、かつSQLが実行可能なユーザ名とパスワードを指定してください。

JDBC Requestの指定箇所は下図の赤枠部分です。
Variable Name of Pool declared in JDBC Connection ConfigurationにはJDBC Connection ConfigrationのVariable Name for created poolで指定した名前を指定します。
Query Typeに実行するクエリの種類を選択します。
Queryには実行するクエリを記載します。Oracle Databaseなので最後に;を付けたらエラーになりましたの注意ください。
test.aテーブルのすべてを検索するという内容のクエリです(test.aには1万件のデータが登録済)。

上記まで完了したら、一度実行して「View Results Tree」の結果を見ることを推奨します。
JDBC RequestがOKでResponse Bodyにクエリの実行結果が出ていれば動作確認は完了です。

負荷テストはThread GroupのThread Propertiesを設定して実施します。
下図は2秒間に100アクセスを10回ループする設定です(20秒で1000アクセス)。

 

パフォーマンスモニター等の監視ツールでサーバ負荷を確認して完了です。

実際は1台のPCで20秒で1000アクセスはよほどの高スペックPCではないと無理(DBサーバより前にPCが固まりました)なのと、そんな環境は現実的ではないので、5台のPCで同時に実行しました。

関連記事

TOP