Oracle用I/OワークロードツールのSLOBを使ってみる



#参考にした記事、ドキュメント

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