ニュース&ブログ
jdbcRunnerを使ってDatabaseの性能評価しちゃったシリーズ①jdbcRunnerのインストール設定方法 編
この記事は最終更新から9年以上経過しています。内容が古くなっている可能性があります。
投稿日:2015/8/24

そもそもデータベースの負荷試験って?
そもそも、データベースの負荷試験ってどのような物があるのでしょうか?分類すると以下のような負荷試験がデータベースには存在します。①実際のアプリケーションを利用し、負荷を掛ける事でDatabaseにも負荷を掛ける。
実際のアプリケーションを利用し、実際のデータ、あるいは実際に即したデータを利用する事で、これらのアプリケーションに負荷を掛ける事で、アプリケーションサーバも含めた負荷試験を行う方式です。利用ツールは以下のようなものが考えられます。
・独自で作成したテストシナリオ/ツール
・Apache Bench
・Apache JMeter
②実際のアプリケーションを基にして、トランザクションを抽出。抽出トランザクションを走行する。
これは聞きなれない方も多いかもしれませんが、Oracle Real Application Testingを使うと言う事です。実際に流れているトランザクションをキャプチャし、負荷試験環境でキャプチャ結果をロードします。データの準備などがわずらわしかったりします。
・Oracle Real Application Testing
※私はこのツールしか知りません。。。
③モデル化されたアプリケーションを利用して、データベースへ負荷を掛ける。
今回の記事の内容です。ベンチマークツールなどを利用して、モデル化されたアプリケーションをDatabaseに流すことによって負荷を測定します。負荷試験のアプリケーションモデルを自分で作るのは難しいと言う方でも、TPC(トランザクション処理性能評議会)が出しているTPC-C、TPC-Bなどのシナリオを実行する事が出来るので安心してください。毎回同じ条件で実行できる。準備が簡単などの理由から、冒頭で説明した場面で意外と役に立ちます。
・jdbcRunner
・HammerORA
負荷試験実施で具体的に役立つ場面
冒頭でも少し触れましたが、負荷試験に役立つ具体的な場面はこんなところでしょうか?・ハードウェアの構成が変わったが、性能に影響はあるのか?
・オンプレミスからクラウドへDatabaseを移行したいが、どのインスタンスタイプが妥当か?
・バックアップ取得時にどれくらい性能劣化が発生するのか?
・Databaseの最新のバージョンへアップグレードした時は、性能に変化はあるのか?
などなど、考えれば意外とたくさんあるものです。性能の指標や、性能劣化の判断、性能比較にはもってこいですね!
負荷試験ツール「jdbcRunner」を用いた今回の記事の範囲
前置きこれぐらいにしまして、今回は負荷試験ツールを使って、テストシナリオに簡易的なSELECTを実行できるようなシナリオを用意しテストを実行しようと思います。負荷試験ツールにはjdbcRunnerと言う負荷試験ツールを利用し、Oracle DatabaseにAmazon RDSを利用すると言う以下のような構成で負荷試験ツールのインストールからテストシナリオの作成、実施までざっと紹介したいと思います。※jdbcRunnerの説明はまた別の機会に。
図1:構成図

「jdbcRunner」の設定にあたり必要な事
さて、jdbcRunnerに関しまして、詳しい情報は下記のサイトなどを参考にしていただければと思います。https://dbstudy.info/jdbcrunner/manual_ja/
このjdbcRunnerを動かす為に、今回の構成のようにEC2インスタンスで準備しなければならない事は以下の通りです。
① Java SEのインストール
② Oracle jdbc thin ドライバーのインストール
③ jdbcRunnerの設定
④ テストシナリオの作成
⑤ テストの実施
それでは、実際にやってみましょう。
①Java SEのインストール
まずは、以下のサイトでjava SEをダウンロードしてください。 http://www.oracle.com/technetwork/jp/java/javase/downloads/index.html「Java Platform(JDK)」をクリック
図2:Java Platform(JDK)をクリック

図3:メディアダウンロード

図4:exeをダブルクリック

図5:JDKセットアップ1

図6:JDKセットアップ2

図7:JDKセットアップ3

図8:JDKセットアップ4

図9:JDKセットアップ5

図10:JDKセットアップ6

図11:Javaバージョン確認

②Oracle jdbc thin driverの準備
jdbcRunnerはその名の通りjdbcドライバーでDatabaseへの接続を行いますので、jdbcドライバーをインストールする必要があります。ただ、jdbcドライバーのみインストールしてもDatabaseの操作などが出来ない為、今回は「Oracle Instant Client」をインストールします。
以下のサイトより必要なデータをダウンロードします。
http://www.oracle.com/technetwork/jp/database/features/instant-client/index-352321-ja.html
ここからダウンロードします。
図12:Oracle Client ダウンロード1

図13:Oracle Client ダウンロード2

図14:Oracle Client ダウンロード3

図15:Oracle Client ダウンロード4

コマンドプロンプトで先ほど解凍した「instantclient_11_2」直下まで移動し、接続です。
【接続コマンド】
sqlplus <ユーザ名>/<パスワード>@<エンドポイント名>:<ポート番号>/
図16:SQLPlus接続確認

③jdbcRunnerの設定
次はjdbcRunnerの設定です。jdbcRunnerの設定と言っても、基本はダウンロードするだけです。jdbcRunnerは以下のvector等以下のサイトからダウンロードできます。
http://www.vector.co.jp/soft/other/java/se481080.html
これもダウンロードすると、zipファイルになっているので、Cドライブ直下に解凍しました。
図17:jdbcRunnerダウンロード

コマンドプロンプトで「jdbcrunner-1.2」直下まで移動し以下の通り設定を確認してください。
> set CLASSPATH=C:\jdbcrunner-1.2\jdbcrunner-1.2.jar
> java JR
図18:jdbcRunner設定

④ テストシナリオの作成
今回jdbcRunnerで実施するテストシナリオは以下の通りです。図19:テストシナリオ

2) jdbcRunnerよりSELECT文を実行し、結果が返ってくるまでで1トランザクションとする。
3) 2)を60秒間実行し性能を確認する。(ウォームアップは10秒とする。)
まずは、TESTテーブルの作成を行います。sqlplusで接続後以下のDDLでテーブルを作成、その後、データを投入し、投入が完了すれば、Analyzeをして統計情報を取得して置きます。
create table test(id number,data varchar(10),primary key(id));
INSERT INTO test (id, data) VALUES (1, ‘aaaaaaaaaa’);
INSERT INTO test (id, data) VALUES (2, ‘bbbbbbbbbb’);
INSERT INTO test (id, data) VALUES (3, ‘cccccccccc’);
INSERT INTO test (id, data) VALUES (4, ‘dddddddddd’);
INSERT INTO test (id, data) VALUES (5, ‘eeeeeeeeee’);
commit;
exec dbms_stats.gather_table_stats(ownname=>’oracle’,tabname=>’TEST’);
図20:Create table test

図21:test.js

var jdbcUrl = “jdbc:oracle:thin://@<エンドポイント名>:<ポート番号>/”;
jdbcUserとjdbcPassは先ほど、テーブルを作成したユーザ名とパスワードを指定してください。
※私は先ほど「oracle」と言うユーザでテーブルを作成しましたので「oracle」を指定しています。
⑤テストの実施
先ほどテストシナリオの準備と、「test.js」ファイルの作成が完了しましたので、次はこのテストの実施です。先ほど作成したtest.jsが配置さているフォルダ直下までコマンドプロンプトで移動し、CLASSPATHの設定を行ってください。
また、この時に、Oracle Instant Clientでインストールしたjdbcドライバーのファイルパスも一緒に指定するようにしてください。
図22:CLASSPATH設定 ※私の場合、C直下にOracle Instant Clientを配置した為、下記のような指定となります。

java JR test.js
図23:jdbcRunnerの実行

また、以下のようなファイルが実行カレントディレクトリ直下に出力されます。
Jdbcrunner.txt・・・jdbcRunnerの走行ログ。
log_YYYYMMDD-HH24MISS_r.csv・・・レスポンスタイム(ms)の集計結果
log_YYYYMMDD-HH24MISS_t.csv・・・経過時間とスループット(tps)の集計結果
今回の場合ですと、60秒間で124678回のトランザクションを実行し、スループットは2078tpsとなっています。
また、出力されたcsvからグラフを作成するとこんな感じになります。
図24:レスポンス時間

各時間においてスループットの大きな変化がない事も確認できます。
図25:各時間におけるスループット

最後に
いかがでしたか?少し長くなってしまいましたが、大体のjdbcRunnerを使ったDatabaseへのベンチマークテストの方法に関してイメージできたかと思います。今後はTPC-Cのテスト方法や、これらを使って色々と検証した結果をまとめていきたいと思います。楽しみにしておいてください!それでは、Enjoy Summer Days!!