6
4

More than 3 years have passed since last update.

[Oracle] JDBCRunnerでデータベース負荷テスト

Last updated at Posted at 2020-06-27

実行環境

※Oracle Cloud InfrastructureのVMを利用しています。

  • OS: Linux
  • Oracle Database システムバージョン:19.7.0.0.0
  • JdbcRunnerバージョン: 1.3

各種ツールのインストール

「Java」「Oracle用JDBCドライバ(jar)」「JDBCRunnerツール(jarとjs実行スクリプト)」が必要です。

Javaインストール

[opc@dbcs2 ~]$ sudo yum install java-1.8.0-openjdk

フォルダに権限付与

※テスト環境であるため、ユーザディレクトリを使用しています。

[opc@dbcs2 ~]$ sudo chmod 644 /home/oracle

Javaツールインストール

Jarファイルを配備し、CLASSPASSにパスを通します。

JDBCRuner

JdbcRunnerの詳細情報 : Vector ソフトを探す! から「jdbcrunner-1.3.jar」をダウンロードし、「/home/oracle/」に配備

Oracle Database用のJDBCドライバ

Oracle JDBC and UCP 19c Download page から「ojdbc10.jar」をダウンロードし、「/home/oracle/」に配備。

CLASSPATH設定

set CLASSPATH=jdbcrunner-1.3.jar:ojdbc10.jar:ucp.jar

以下のようになっていれば完了
[oracle@dbcs2 ~]$ env | grep CLASSPATH
CLASSPATH=jdbcrunner-1.3.jar:ojdbc10.jar:ucp.jar

テストデータ作成

ユーザ作成

OSユーザ切替
[opc@dbcs2 ~]$ sudo su - oracle

データベース接続
[oracle@dbcs2 ~]$ sqlplus / as sysdba

データベースユーザ作成
SQL> CREATE USER tpcb IDENTIFIED BY tpcb;
SQL> GRANT CREATE SESSION, CREATE TABLE, UNLIMITED TABLESPACE TO tpcb;

テーブル作成

「tpcb_load.js」を「/home/oracle」に配備して、内容を修正

tpcb_load.js

// ※Oracle Database以外のjdbcUrlはコメントアウトしてjdbcUrlを設定
// Oracle Database
var jdbcUrl = "jdbc:oracle:thin:@//サーバのパブリックIPアドレス:1521/サービス名";
// サービス名は「$ORACLE_HOME/network/admin/tnsnames.ora」に記載されている。

var jdbcPass = "自分で決めたtpcbユーザのパスワードに変更";
var jdbcDriver = "oracle.jdbc.driver.OracleDriver";

スクリプト実行

テストデータ作成用のスクリプトを実行します。

[oracle@dbcs2 ~]$ java JR tpcb_load.js

負荷テスト実行

「/home/oracle」に「tpcb.js」を配備して「tpcb_load.js」と同様に修正。
以下のコマンドで実行。

[oracle@dbcs2 ~]$ java JR tpcb.js

:
:
22:42:39 [INFO ] [Progress] 62 sec, 710 tps, 49326 tx
22:42:40 [INFO ] [Progress] 63 sec, 732 tps, 50058 tx
22:42:41 [INFO ] [Progress] 64 sec, 682 tps, 50740 tx
22:42:42 [INFO ] [Progress] 65 sec, 711 tps, 51451 tx
22:42:43 [INFO ] [Progress] 66 sec, 771 tps, 52222 tx
22:42:44 [INFO ] [Progress] 67 sec, 678 tps, 52900 tx
22:42:45 [INFO ] [Progress] 68 sec, 752 tps, 53652 tx
22:42:46 [INFO ] [Progress] 69 sec, 669 tps, 54321 tx
22:42:47 [INFO ] [Progress] 70 sec, 744 tps, 55065 tx
22:42:48 [INFO ] [Progress] 71 sec, 791 tps, 55856 tx
22:42:49 [INFO ] [Progress] 72 sec, 756 tps, 56612 tx
:
:
22:44:37 [INFO ] [Total tx count] 141818 tx
22:44:37 [INFO ] [Throughput] 787.9 tps
22:44:37 [INFO ] [Response time (minimum)] 4 msec
22:44:37 [INFO ] [Response time (50%tile)] 15 msec
22:44:37 [INFO ] [Response time (90%tile)] 34 msec
22:44:37 [INFO ] [Response time (95%tile)] 47 msec
22:44:37 [INFO ] [Response time (99%tile)] 85 msec
22:44:37 [INFO ] [Response time (maximum)] 354 msec
22:44:37 [INFO ] < JdbcRunner SUCCESS

参考サイト

Java

Oracle Database

JDBC

JDBCRuner

おまけ(自作スクリプト)

SQL

create table sample(
  id number GENERATED by default on null as IDENTITY,
  charcol1 varchar2(4000)
);

シェルスクリプト


#!/bin/bash
(
  for ((i=0;i<2000;i++)); do
    echo -e "SELECT count(*) FROM sample;\n"
    echo -e "insert into sample(charcol1) values ('mxvtvmC9127qJNm06sGB8R92q2j7vTiiITRDGXM9ZLzkdekbWtmXKwZ2qG1llkRw5m9DHOFilEREk3q7oce8O3BEJC0woJsm6uzFAEynLH2xCsw1KQ1lT4zg9rdxBL');\n"
    echo -e "commit;\n"
    sleep 1
  done
  echo "exit"
) | sqlplus / as sysdba
exit $?

【参考】
* Oracle:接続1回でSQLを繰り返し実行するシェルスクリプト | けしくんのWebLog
* Shellでsqlplusを使ってSQLを実行する方法 | エンジニアへの道

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4