NEWSニュース&ブログ

jdbcRunnerを使ってDatabaseの性能評価しちゃったシリーズ①jdbcRunnerのインストール設定方法 編

この記事は最終更新から9年以上経過しています。内容が古くなっている可能性があります。

投稿日:2015/8/24

皆様。こんにちは。アブドーラ・ザ・ブッチャーです。今回はOracle Database などを利用する際にとっても気になる。負荷試験(ベンチマーク試験)に関して、記載します。「オンプレミスから、AWSなどへDatabaseの移行を行う際に、性能は大丈夫なのかな?」、「インスタンスタイプなどの変更を行うと本当にDatabaseの性能が向上するのかな?」などDatabaseの性能に関する疑問・不安はつきものです。そういった場合に意外と役に立つのがこのベンチマークテストと言う訳です。

そもそもデータベースの負荷試験って?

そもそも、データベースの負荷試験ってどのような物があるのでしょうか?分類すると以下のような負荷試験がデータベースには存在します。

①実際のアプリケーションを利用し、負荷を掛ける事で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)をクリック 今回は64bitのWindowsなので「Windows_x64」をダウンロードしてください。

図3:メディアダウンロード ダウンロードが完了すればexeをダブルクリックしてください。

図4:exeをダブルクリック 「次へ」

図5:JDKセットアップ1 「開発ツール」が選択されている事を確認し「次へ」

図6:JDKセットアップ2 インストーラが進みます。

図7:JDKセットアップ3 Javaを別のフォルダにインストールしないので「次へ」

図8:JDKセットアップ4 インストーラが動きます。

図9:JDKセットアップ5 完了です。「閉じる」で問題ありません。

図10:JDKセットアップ6 最後にコマンドプロンプトからJavaのバージョンを確認しておきます。

図11:Javaバージョン確認 こんな感じで表示されればOK。

②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 Windowsの64bitの物を選択

図13:Oracle Client ダウンロード2 必要なInstant Client Packageは、Instant Client Package – Basicとsqlplusが含まれるInstant Client Packageです。これら2つをダウンロードしてください。ダウンロードが完了すると、zipファイルを任意の場所で解凍してください。「instantclient_11_2」と言う同一のフォルダに解凍した2つのzipファイルの中身がまとまります。

図14:Oracle Client ダウンロード3 私はCドライブ直下に解凍しました。

図15:Oracle Client ダウンロード4ここで、sqlplusで接続してみます。
コマンドプロンプトで先ほど解凍した「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」がある事を確認してください。

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

図18:jdbcRunner設定

④ テストシナリオの作成

今回jdbcRunnerで実施するテストシナリオは以下の通りです。

図19:テストシナリオ 1) TESTテーブルには5件データが挿入されており、idはプライマリーキー
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
次に以下のような内容の「test.js」ファイルを作成し、任意のフォルダに配置してください。

図21:test.js
jdbcUrlの設定はjdbcドライバーの場所を指定する必要があります。

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:レスポンス時間レスポンス時間はそのほとんどが1msec以下である事が確認できます。

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

図25:各時間におけるスループット

最後に

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