#参考にした記事、ドキュメント
Oracle Database の I/O 負荷テストツール SLOB(The Silly Little Oracle Benchmark) の紹介
http://d.hatena.ne.jp/yohei-a/20171221/1513867831
Kevin Closson's Blog: Platforms, Databases and Storage
https://kevinclosson.net/slob/
Introducing SLOB – Simple Database I/O Testing Toolkit for Oracle Database
https://kevinclosso
製品付属のREADME
https://github.com/therealkevinc/SLOB_distribution/blob/master/SLOB-2.4.2_README.pdf
#試した環境
- Oracle Linux Server release 7.3
- Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
- NON-CDB
- SingleDB、Filesystem
#インストール
##ダウンロード
$ curl -L -O https://github.com/therealkevinc/SLOB_distribution/raw/master/2018.04.16.slob_2.4.2.1.tar.gz
##解凍
$ tar xvfz 2018.04.16.slob_2.4.2.1.tar.gz
→SLOBディレクトリが作成される
##コンパイル
makeにはgccが必要なので注意。
$ 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
cd ..
#事前準備
テスト用の表領域の作成
作成用のSQLがmiscディレクトリは以下のts.sqlとして準備されている。
SQL> @misc/ts.sql
として実行する。
SQL文中で表領域の指定がないため、必要に応じてdb_create_file_destの指定を行う。
$ sqlplus / as sysdba
SQL> alter session set db_create_file_dest='/u01/app/oracle/oradata/orcl';
Session altered.
SQL> @misc/ts.sql
SQL> set timing on
SQL> drop tablespace IOPS including contents and datafiles;
drop tablespace IOPS including contents and datafiles
*
ERROR at line 1:
ORA-00959: tablespace 'IOPS' does not exist
Elapsed: 00:00:00.01
SQL>
SQL> create BIGFILE tablespace IOPS datafile size 1G
2 NOLOGGING ONLINE PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE SEGMENT SPACE MANAGEMENT AUTO ;
Tablespace created.
Elapsed: 00:00:31.76
SQL>
SQL> alter tablespace IOPS autoextend on next 200m maxsize unlimited;
Tablespace altered.
Elapsed: 00:00:00.00
SQL> exit;
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
##設定ファイルの確認/変更
slob.confファイルで指定する。
以下の項目がデフォルトで指定されている。
パラメータの詳細については、READMEに記載がある。
$ grep -v -e '^\s*#' -e '^\s*$' slob.conf
UPDATE_PCT=10
SCAN_PCT=0
RUN_TIME=300
WORK_LOOP=0
SCALE=80M
SCAN_TABLE_SZ=1M
WORK_UNIT=64
REDO_STRESS=LITE
LOAD_PARALLEL_DEGREE=2
THREADS_PER_SCHEMA=1
DATABASE_STATISTICS_TYPE=statspack # Permitted values: [statspack|awr]
EXTERNAL_SCRIPT=''
DO_HOTSPOT=FALSE
HOTSPOT_MB=8
HOTSPOT_OFFSET_MB=16
HOTSPOT_FREQUENCY=3
HOT_SCHEMA_FREQUENCY=0
THINK_TM_FREQUENCY=0
THINK_TM_MIN=.1
THINK_TM_MAX=.5
ここでは、Oracle管理ユーザの設定と、レポートの種別の変更(Statspack→AWR)を行う。
$cp -p slob.conf slob.conf.bk
$ vi slob.conf
$ diff slob.conf slob.conf.bk
[oracle@ol122a SLOB]$ diff slob.conf slob.conf.bk
15c15
< DATABASE_STATISTICS_TYPE=awr # Permitted values: [statspack|awr]
---
> DATABASE_STATISTICS_TYPE=statspack # Permitted values: [statspack|awr]
28,29c28,29
< DBA_PRIV_USER="system"
< SYSDBA_PASSWD="oracle"
---
> #DBA_PRIV_USER="system"
> #SYSDBA_PASSWD="manager"
##ベンチマーク用のテーブルを作成
setup.shにてベンチマーク用のテーブルを作成する。使い方は以下。
Usage : ./setup.sh: <tablespace name> <number of SLOB schemas to create and load>
ここでは、IOPS表領域に1スキーマを作成する。
$ sh ./setup.sh IOPS 1
SLOB 2.4.0
NOTIFY : 2018.04.22-15:39:00 :
NOTIFY : 2018.04.22-15:39:00 : Begin SLOB setup.
NOTIFY : 2018.04.22-15:39:00 : ADMIN_CONNECT_STRING: "system/oracle"
NOTIFY : 2018.04.22-15:39:00 : Load parameters from slob.conf:
SCALE: 80M (10240 blocks)
SCAN_TABLE_SZ: 1M (128 blocks)
LOAD_PARALLEL_DEGREE: 2
ADMIN_SQLNET_SERVICE: ""
SYSDBA_PASSWD: "oracle"
DBA_PRIV_USER: "system"
Note: setup.sh will use the following connect strings as per slob.conf:
Admin Connect String: "system/oracle"
Non-Admin Connect String: " "
<中略>
NOTIFY : 2018.04.22-15:39:08 : examine /home/oracle/slob/SLOB/cr_tab_and_load.out
NOTIFY : 2018.04.22-15:39:08 : SLOB setup complete. Total setup time: (8 seconds)
結果ログの確認
$ cat /home/oracle/slob/SLOB/cr_tab_and_load.out
<中略>
OWNER TABLE_NAME NUM_ROWS BLOCKS
---------- ---------- ---------------- ----------------
USER1 CF1 10,240 11,123
USER1 CF2 128 134
#テストの実行と結果
##テストの実行
runit.shにてテストの実行を行う。使い方は以下。
./runit.sh supports the following command usage:
1. Single Option Invocation.
$ sh ./runit.sh <number-of-SLOB-schemas-to-test>
2. Multiple Option Invocation
2.1 This invocation style requires *exactly* four options.
$ sh ./runit.sh -s <number-of-slob-schemas-to-test> -t <SLOB-threads-per-schema>
ここでは1スキーマで実施。
$ sh ./runit.sh 1
NOTIFY : 2018.04.22-15:42:22 : For security purposes all file and directory creation and deletions
<中略>
NOTIFY : 2018.04.22-15:48:35 :
NOTIFY : 2018.04.22-15:48:35 : SLOB test is complete.
NOTIFY : 2018.04.22-15:48:35 : Cleaning up SLOB temporary directory (/tmp/.SLOB.2018.04.22.154222).
#結果と評価
##結果ファイル
AWRレポート(あるいはStatspackレポート)、OS情報(vmstat,iostat,mpstat)が取得されている。
$ ls -lt awr.txt
-rw-r--r--. 1 oracle oinstall 224457 Apr 22 15:48 awr.txt
$ ls -lt mpstat.out iostat.out vmstat.out
-rw-r--r--. 1 oracle oinstall 9339 Apr 22 15:48 vmstat.out
-rw-r--r--. 1 oracle oinstall 62683 Apr 22 15:48 iostat.out
-rw-r--r--. 1 oracle oinstall 40141 Apr 22 15:48 mpstat.out
##awr結果の整形
AWRレポートをスプレッドシートでまとめやすい形式にサマリするツールが提供されている。
miscディレクトリ以下のawr_info.shを実行する。
なお、本シェルの実行にはbcが必要なので事前にインストールしておく。
$ sh ./misc/awr_info.sh awr.txt
FILE|SESSIONS|ELAPSED|DB CPU|DB Tm|EXECUTES|LIO|PREADS|READ_MBS|PWRITES|WRITE_MBS|REDO_MBS|DFSR_LAT|DPR_LAT|DFPR_LAT|DFPW_LAT|LFPW_LAT|TOP WAIT|
awr.txt||304|0.6|1.0|5271|343110|8| 9.5|321| 26|8.7| 4918|0| 0| 39967| 4558|DB CPU
##評価
本ツールではTPS等での評価は行わない。
評価のポイントとしては、READMEでは以下が紹介されている。
###Physical I/O Testing
- SQL Executions(awr_infoのEXECUTESの値)
- Physical IOPS(awr_infoのPREADSとPWRITESの合計)
###Logical I/O Testing
- Logical IOPS(awr_infoのLIOの値)
#その他の参考
grepでコメント行および空白行を削除する
https://qiita.com/n-oshiro/items/91d807f3151694e6c7a8
curlでファイルをダウンロードする
http://d.hatena.ne.jp/ksaito11/20090605/1244208059