- ベンチマークツールの「JdbcRunner - 汎用データベース負荷テストツール」を使ってOracle Databaseの負荷テストを行います。
- データベースはOracle Cloud InfrastructureのVMを利用しています。
- テストシナリオとしては、「10. テストキット Tiny TPC-C(卸売業における注文・支払いなどの業務をモデルにしたトランザクション, )」を使用しています。
実行環境
※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
- JDBC - Database Connections - Tutorialspoint
- java - Cannot create PoolableConnectionFactory (Io exception: The Network Adapter could not establish the connection) - Stack Overflow
- How to fix: "No suitable driver found for jdbc:mysql://localhost/dbname" error when using pools? - Stack Overflow
JDBCRuner
- jdbcRunnerを使ってDatabaseの性能評価しちゃったシリーズ①jdbcRunnerのインストール設定方法 編 | クラウド工房 Powered by Amazon Web Services
おまけ(自作スクリプト)
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 $?
【参考】