JPOUG Advent Calendar 2017 の21日目のエントリーです。昨日は JPOUG in 15 minutes at db tech showcase Tokyo 2017 開催報告 でした。
JPOUG Advent Calendar に参加するのも6年目になりました。
今年は「SLOB(The Silly Little Oracle Benchmark) 」というOracle Database 向けの I/O 負荷テストツールを使って、AWS で RDS Oracle にI/O負荷をかける手順を紹介します。
I/Oベンチマークツールには iomater、fio のような汎用的なベンチマークツールから Oracle ORION のような Oracle Database の I/O パターンをシミュレートするものなどがありますが、SLOB は Oracle Database に実際に SQL を発行してストレージの I/O 性能(I/Oレイテンシ、IOPS、I/Oスループット)を計測したいときに有益なツールです。
SLOB とは
SLOB(The Silly Little Oracle Benchmark) は Kevin Closson が開発した Oracle Database 向けのI/O負荷テストツールです。Cで書かれた小さなプログラムで、sqlplus で Oracle Database に SQL を発行してI/O負荷をかけるコマンドラインツールです。
Oracle ORION と DBMS_RESOURCE_MANAGER.CALIBRATE_IO の中間でかつ Swingbench のようなトランザクション発行機能を備えたリアルな Oracle Database のI/O負荷テストツールです。詳しくは Introducing SLOB – The Simple Database I/O Testing Toolkit for Oracle Database を参照してください。
人気・実績のあるツールで、以下のベンダーが SLOB によるベンチマーク結果を公開しています。
SLOB Use Cases By Industry Vendors. Learn SLOB, Speak The Experts’ Language. | Kevin Closson's Blog: Platforms, Databases and Storage
- flashgrid.io
- VMware
- A joint paper co-branded by Intel and Quanta Cloud Technologies
- VCE
- Nutanix
- Netapp
- HPE
- Pure Storage
- Nimble
- IBM
- Red Hat
- Dell EMC
- Red Stack Tech.
作者の Kevin Closson について
Kevin Closson は元 Oracle の Exadata のパフォーマンス・アーキテクトで、EMC で XtremIO のチーフパフォーマンスアーキテクトを経て、現在は AWS のソリューションアーキテクトです。 その前は、HP、IBM、Sequent、Veritas などで商用UNIXにおける Oracle Database の性能向上に関わっていた人で、SMP/NUMAのロックやデータベースのキャッシングの特許の発明者というディープなバックグラウンドを持った人です。詳しくはコチラ。
構成
インストール・設定手順
EC2 に Oracle Instant Client をインストールする
- Instant Client for Linux x86-64 (64-bit) から Oracle Instant Client をダウンロードしてインストールする。
$ rpm -ivh oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64 $ rpm -ivh oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm
EC2 に gcc をインストールする
$ sudo yum -y install gcc
EC2 に SLOBをインストールする
- SLOB Resources | Kevin Closson's Blog: Platforms, Databases and Storage から SLOB 2.4.2 をダウンロードする。
- SLOB をビルドする。
$ tar xfz 2017.06.14.slob_2.4.2.tar.gz $ cd SLOB/wait_kit $ make rm -fr *.o mywait trigger create_sem cc -c -o mywait.o mywait.c cc -o mywait mywait.o cc -c -o trigger.o trigger.c cc -o trigger trigger.o cc -c -o create_sem.o create_sem.c cc -o create_sem create_sem.o cp mywait trigger create_sem ../ rm -fr *.o
SLOBの設定をする
- tnsnames.ora を設定する。
$ mkdir slob_test $ cd slob_test $ vim tnsnames.ora slob = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = orcl1210.******.ap-northeast-1.rds.amazonaws.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) ) )
$ export TNS_ADMIN=`pwd` $ echo $TNS_ADMIN /home/ec2-user/slob_test $ sqlplus awsuser@slob
- SLOB用の表領域を作成する
SQL> @./misc/ts
- バッファキャッシュのサイズを確認する
- バッファキャッシュより大きいデータサイズにしてI/Oを発生させるため、バッファキャッシュのサイズ / 80MB(SLOB のデフォルトのテーブルのサイズ)を計算して、あとで setup.sh や runit.sh を実行する際に使用する。
- slob.conf で SCALE を 80M から 300M に変更した。
SQL> show sga Total System Global Area 1.2482E+10 bytes Fixed Size 2938208 bytes Variable Size 6308235936 bytes Database Buffers 6140461056 bytes Redo Buffers 30613504 bytes SQL> select round(6140461056/(80*1024*1024)) from dual; ROUND(6140461056/(300*1024*1024)) -------------------------------- 20
- slob.conf を設定する
SCALE=300M (中略) SQLNET_SERVICE_BASE=slob SQLNET_SERVICE_MAX=slob (中略) DBA_PRIV_USER="awsuser" SYSDBA_PASSWD="********"
- 今回は Oracle Instant Client を使用しているため、setup.sh の tnsping を使っている箇所をコメントアウトする(Instant Client には tnsping がないため)。
$ cp -pi setup.sh setup.sh.org $ vi setup.sh $ diff setup.sh.org setup.sh 179c179,180 < for exe in sqlplus tnsping --- > #for exe in sqlplus tnsping > for exe in sqlplus 273,279c274,280 < if ( ! tnsping $svc >> $LOG 2>&1 ) < then < f_msg FATAL "" < f_msg FATAL "${FUNCNAME}: tnsping failed to validate SQL*Net service ( $svc )" < f_msg FATAL "Examine $LOG" < return 1 < fi --- > #if ( ! tnsping $svc >> $LOG 2>&1 ) > #then > # f_msg FATAL "" > # f_msg FATAL "${FUNCNAME}: tnsping failed to validate SQL*Net service ( $svc )" > # f_msg FATAL "Examine $LOG" > # return 1 > #fi
- ベンチマーク用のテーブルを作成する。
$ sh ./setup.sh IOPS 20
- 作成されたテーブルを確認する。
$ cat cr_tab_and_load.out
SLOBでI/O負荷をかける
- 負荷をかける。
$ sh ./runit.sh 20
- Statspack レポートを出力する。
SQL> select snap_id, snap_time from stats$snapshot order by 1; SQL> exec RDSADMIN.RDS_RUN_SPREPORT(5,6);
- AWSマネジメントコンソールからダウンロードして確認する。
STATSPACK report for Database DB Id Instance Inst Num Startup Time Release RAC ~~~~~~~~ ----------- ------------ -------- --------------- ----------- --- 1487923022 ORCL 1 21-Dec-17 05:22 12.1.0.2.0 NO Host Name Platform CPUs Cores Sockets Memory (G) ~~~~ ---------------- ---------------------- ----- ----- ------- ------------ ip-10-7-1-139 Linux x86 64-bit 4 2 1 15.7 Snapshot Snap Id Snap Time Sessions Curs/Sess Comment ~~~~~~~~ ---------- ------------------ -------- --------- ------------------ Begin Snap: 5 23-Dec-17 01:26:35 122 1.0 End Snap: 6 23-Dec-17 01:31:39 42 1.1 Elapsed: 5.07 (mins) Av Act Sess: 79.9
補足
- Oracle Instant Client には tnsping は含まれない。
apparently oracle removed tnsping from the instant client 11.2.0.2.
adding tnsping to the instant client 11.2 | pfierens
参考情報など
参考
- Introducing SLOB – The Simple Database I/O Testing Toolkit for Oracle Database | Kevin Closson's Blog: Platforms, Databases and Storage
- SLOB Use Cases By Industry Vendors. Learn SLOB, Speak The Experts’ Language. | Kevin Closson's Blog: Platforms, Databases and Storage
- Step-By-Step SLOB Installation and Quick Test Guide for Amazon RDS for Oracle. | Kevin Closson's Blog: Platforms, Databases and Storage
- Testing Amazon RDS for Oracle: Plotting Latency and IOPS for OLTP I/O Pattern | AWS Database Blog