From Robs_Wiki
Jump to: navigation, search



SLOB is an Oracle I/O workload generation tool kit to test physical and logical I/O in terms of speed and performance. In this post I explain how I used SLOB as a benchmark to determine if Oracle Direct NFS was a good option to use on our Solaris database servers. But there are plenty of other scenario's you can use with SLOB.

Step 1 Download the tool

You can download the latest tar set from the following location:

Step 2 Upload & stage the SLOB Tool

Upload the SLOB tool to the database server and unpack:

$ pwd

$ ls

$ gunzip 2018.04.16.slob_2.4.2.1.tar.gz

$ ls

$ tar -xf 2018.04.16.slob_2.4.2.1.tar

$ ls
2018.04.16.slob_2.4.2.1.tar  SLOB

Edit the file SLOB.conf and change




Step 3 Compile the SLOB utility

Workaround for Solaris:

$ export PATH=PATH=$PATH:/usr/sfw/bin
$ which gcc

-- Edit the Makefile. Da a global replace:
$ 1,$ s/cc/gcc/g

Then run the make command:

$ /home/oracle/dbadir/rob/slob/SLOB/wait_kit>make
rm -fr *.o mywait trigger create_sem 
gcc   -c  mywait.c
gcc -o mywait mywait.o 
gcc   -c  trigger.c
gcc -o trigger trigger.o
gcc   -c  create_sem.c
gcc -o create_sem create_sem.o
cp mywait trigger create_sem ../
rm -fr *.o

Step 4 Create a SLOB tablespace & sample data

Create the tablespace:

SQL> set echo on
SQL> set timing on

SQL> @/home/oracle/dbadir/slob/SLOB/misc/ts.sql

SQL> create BIGFILE tablespace IOPS datafile'/u02/app/oracle/oradata/TSTDB/TSTDB/iops01.dbf' size 1G

Tablespace created.

Elapsed: 00:00:14.20

Create the sample data:

SQL> !cat gen_data.sql
set timing on
spool gen_data.log

create table robla.t1 as
rownum as id, 
'Just some text' as textcol,
mod(rownum,5) as numcol1, 
mod(rownum,1000) as numcol2 , 
5000 as numcol3, 
to_date ('01.' || lpad(to_char(mod(rownum,12)+1),2,'0') || '.2018' ,'') as time_id  
from dual connect by level<=1e7 ; 
select count(*) from robla.t1;

select bytes/1024/1024 as mb from user_segments where segment_name='T1';
spool off
SQL> @gen_data.sql
Session altered.

Elapsed: 00:00:00.00

Session altered.

Elapsed: 00:00:00.01

Table created.

Elapsed: 00:01:11.52


Elapsed: 00:00:14.94

SQL> select bytes/1024/1024 as mb from dba_segments where segment_name = 'T1';


Elapsed: 00:00:00.38

Now copy table t1 to some other tables

SQL> create table robla.t2 as select * from robla.t1;

Table created.

Elapsed: 00:00:18.00
SQL> create table robla.t3 as select * from robla.t1;

Table created.

Elapsed: 00:00:23.19

Step 2 Prepare the database for SLOB

The following steps can be followed to prepare the database for the SLOB tests:

  • Turn off archive log mode in the database. There is no point in generating gigabytes of archivelogs while setting up your test.
  • Create the SLOBDATA tablespace. I recommend using a BIGFILE tablespace allowing up to 32TB of data.
  • Switch the database to use a BIGFILE temporary tablespace. SLOB does not generate temporary data like Swingbench does, but some temporary data is generated.
  • Resize the redo log files to at least 1GB. The default 50MB redo logs will cause excessive log file swicthes which will slow the data generation.
  • Set the parameter filesystemio_options to SETALL to faciliate parallel queuing of redo writes.
  • Set the DB_WRITER_PROCESSES parameter to at least the CPU count divided by 4 to maximize write performance during the load. If your server can handle a greater write load then increase the value of DB_WRITER_PROCESSES.
  • Set the LOAD_PARALLEL_DEGREE in the slob.conf file to twice the number of CPUs as seen by Oracle. This will allow SLOB to generate data in parallel.
  • Create a public directory on the /tmp directory.