NEWSニュース&ブログ

jdbcRunnerを使ってDatabaseの性能評価しちゃったシリーズ②jdbcRunnerによるTPC-C実行 編

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

    皆様。こんにちは。ドリー・ファンク・ジュニアです。前回はjdbcRunnerのインストール方法に関して記載しました。
    さて、今回は、jdbcRunner上にすでにスクリプトが存在している、「Tiny TPC-C」と言うスクリプトを利用して、TPC-Cベンチマークテストを実施する方法に関して記述したいと思いますので、よろしくお願いいたします。

    そもそもTPC-Cって何?

    TPC-CとはTPC(トランザクション性能評議会)によって策定された、ベンチマーク仕様の一つです。卸売業における注文・支払いなどの業務をモデルにしたトランザクションを実行し、データベースの性能を測定できると言うものです。メーカー各社でもベンチマーク測定の為にTPC-Cを使って測定している事例をよく見かけます。
    TPC-Cの情報に関しては私が説明するよりも以下のサイトにわかりやすく説明がのっていますので、確認をお願いいたします。 http://hp.vector.co.jp/authors/VA052413/jdbcrunner/manual_ja/tpc-c.html

     

    今回の構成に関して

    今回の構成は、先ほど紹介した前回の記事と同様の構成でございまして、下記の通りです。

    図1:構成図 これにプラスして、jdbcRunnerのインストールディレクトリやOracleのjdbcドライバーの配置先は
    以下の通りとなっております。

    ・jdbcRunner
     C:\jdbcrunner-1.2\jdbcrunner-1.2.jar
    ・Oracleのjdbcドライバー
     C:\instantclient_11_2\ojdbc6.jar

    と言う具合でございます。

    Tiny TPC-Cの設定方法

    それでは早速、Tiny TPC-Cの設定方法を記載します。
    まずは、対象のRDSへ接続し、TPC-Cで利用するユーザの作成を行います。

    CREATE USER tpcc identified by tpcc;
    GRANT DBA TO tpcc;

    図2:ユーザ作成 これで、ユーザ名が「TPCC」パスワードが「TPCC」のユーザの作成が完了しました。記述では割愛しますが、接続はできるかどうか確認しておいてください。

    では、次はこの作成したユーザに対して、データの作成を行います。jdbcRunnerのフォルダ内に「scripts」と言うフォルダがあります。このフォルダ内にTPC-Cの準備用のスクリプトや、すでにシナリオ作成済みのスクリプトが存在しています。このフォルダ内の「tpcc_load.js」ファイルの一部を変更します。 「tpcc_load.js」ファイルはデフォルトではローカルのMySQLへ接続が行く様に、指定されていますが、今回はRDSのDBへ作成しますので、jdbcUrlを以下の通り書き換えます。

    var jdbcUrl = “jdbc:mysql://localhost:3306/tpcc?rewriteBatchedStatements=true”;

    var jdbcUrl = ” jdbc:oracle:thin://@<RDSのエンドポイント名>:<ポート番号>/<DB名>”;

    また、ここで、ユーザ名やパスワードを「tpcc」意外に指定している場合は、「jdbcUser」、「jdbcPass」の値に関しても変更をしておいてください。

    次は編集した「tpcc_load.js」の実行です。この実行により先ほど作成したユーザ上にデータが投入されます。コマンドプロンプトで以下の「tpcc_load.js」ファイルが存在するフォルダまで移動し、以下のコマンドにより実行をしてください。

    set CLASSPATH=C:\jdbcrunner-1.2\jdbcrunner-1.2.jar;C:\instantclient_11_2\ojdbc6.jar
    java JR tpcc_load.js

    しばらく待つと以下のような出力が出てきます。

    図3:javascript実行結果 準備が完了した事に安堵しましょう。
    また、このスクリプトの中身ではざっくりいうと、
    ・テーブルの削除
    ・テーブルの作成
    ・データロード
    ・インデックスの作成
    ・統計情報の取得
    が行われています。初回起動時に「テーブルが存在しません。」と言う文言が見えますが、これはテーブルの削除が走っており
    初回起動時はテーブルが存在しない為、エラーとなっているだけなので無視して大丈夫です。

    Tiny TPC-Cの実行方法

    それでは次にTiny TPC-Cの実行方法を記載します。まずはデフォルトのTiny TPC-Cの設定に関して確認をしておきましょう。

    ・トランザクションは5種類でそれぞれのトランザクション性能を測定
     トランザクションの種類は以下の5種類でそれぞれ、10:10:1:1:1の比率で実行されます。
     〇New-Order : 注文処理です
     〇Payment : 支払い処理です
     〇Order-Status : 注文状況を確認する処理です
     〇Delivery : 配送処理です
     〇Stock-Level : 在庫状況を確認する処理です
     それぞれのトランザクションに対してトランザクション性能が確認できます。

    ・セッション数は16で実行
     デフォルトのAgent数は16。すなわち、16セッションにて処理が走ります。

    ・ウォーミングアップは300秒。測定時間は900秒

    上記の通りです。
    その他にも設定に関しては色々とありますが今回は割愛させてください。

    では、やってみましょう。「tpcc_load.js」ファイルを実行したフォルダまで移動し、下記のコマンドで実行します。(ここでも、事前に「tpcc.jar」に対して、「tpcc_load.js」で行ったjdbcUrlなどの変更は行っておいてください。)

    set CLASSPATH=C:\jdbcrunner-1.2\jdbcrunner-1.2.jar;C:\instantclient_11_2\ojdbc6.jar
    java JR tpcc.js


    図4:javascript実行結果2 「tpcc.jar」ファイルが存在したフォルダに「logs」フォルダがあります。走行ログや集計結果が出力されているので
    確認する事が出来ます。

    今回の結果はこんな感じになりました。

    図5:レスポンス時間と出現頻度tx0: New-Order
    tx1: Payment
    tx2: Order-Status
    tx3: Delivery
    tx4: Stock-Level


    図6:各時間におけるスループット(TPS)スループットを見ても実行の比率が10:10:1:1:1となっている事が分かります。

    最後に


    いかがでしたでしょうか。jdbcRunnerにおけるTPC-Cの実行方法をご確認いただけたかと思います。また、TPC-B、sysbenchに関してもスクリプトが用意しておりますので、同様の方法で実行できるかと思います。
    皆様のDatabaseにおけるベンチマークテストのお役に立てれば幸いでございます。