By Franck Pachot

.
EXO_IMG_2802
My last post came from a discussion at SITB with exoscale. They are doing Cloud hosting with datacenters in Switzerland. In Switzerland a lot of companies cannot host their data outside of the country, which is a no-go for the big Cloud providers.

After the discussion they gave me a coupon for a trial IaaS instance.
And if you follow my blog you should know that when I have a trial access, there are good chances that I try it…

The provisioning interface is really simple: You choose the datacenter (I choose the one near Zurich, in a disused military bunker) and a VM with 2 vCPU and 2GB RAM.
I want to install Oracle Database. I choose Linux CentOS. I’ll probably try CoreOS later if I’ve some credits remaining.

EXOSCALE003

I’ll have to connect to it so I open the ssh port, which is done with a simple clic, and I add the listener port as my goal is to run SLOB on an Oracle Database and monitor performance with Orachrome Lighty – all components of my favorite ecosystem…

EXOSCALE005

I don’t like passwords so I import my ssh public key:

EXOSCALE002

and the system is ready in few seconds:

EXOSCALE004

Now I can connect with ssh on the ip address provided, as root, and set the system for Oracle Database:


[root@franck ~]# groupadd oinstall
[root@franck ~]# groupadd dba
[root@franck ~]# useradd -g oinstall -G dba oracle
[root@franck ~]# passwd oracle

I put my public ssh key into oracle authorized_keys. I set the kernel settings. I upload the 12c binaries and ready to install.

I install SLOB (https://kevinclosson.net/slob/), useing the create database kit and run the default PIO workload:


UPDATE_PCT: 25
RUN_TIME: 3600000
WORK_LOOP: 10000000
SCALE: 100M (12800 blocks)
WORK_UNIT: 64
REDO_STRESS: LITE
HOT_SCHEMA_FREQUENCY: 0
DO_HOTSPOT: FALSE
HOTSPOT_MB: 8
HOTSPOT_OFFSET_MB: 16
HOTSPOT_FREQUENCY: 3
THINK_TM_FREQUENCY: 0
THINK_TM_MIN: .1
THINK_TM_MAX: .5

EXOSCALE006

Result: 1500 IOPS with latency in few milliseconds for 8k reads.


Load Profile                    Per Second   Per Transaction  Per Exec  Per Call
~~~~~~~~~~~~~~~            ---------------   --------------- --------- ---------
             DB Time(s):               1.0               0.2      0.05      3.89
              DB CPU(s):               0.1               0.0      0.00      0.39
      Background CPU(s):               0.0               0.0      0.00      0.00
      Redo size (bytes):         255,885.4          51,476.9
  Logical read (blocks):           1,375.2             276.7
          Block changes:             652.0             131.2
 Physical read (blocks):           1,261.9             253.9
Physical write (blocks):             324.1              65.2
       Read IO requests:           1,261.7             253.8
      Write IO requests:             310.8              62.5
           Read IO (MB):               9.9               2.0
          Write IO (MB):               2.5               0.5

Wait events (I don’t know why the sum is above 100%…)


Top 10 Foreground Events by Total Wait Time
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                           Total Wait       Wait   % DB Wait
Event                                Waits Time (sec)    Avg(ms)   time Class
------------------------------ ----------- ---------- ---------- ------ --------
db file sequential read          1,826,324     2442.5       1.34   48.2 User I/O
db file parallel read               74,983     2285.2      30.48   45.1 User I/O
DB CPU                                          509.2              10.0

And wait event histogram in microseconds for single block reads:


EVENT                          WAIT_TIME_MICRO WAIT_COUNT WAIT_TIME_FORMAT
------------------------------ --------------- ---------- ------------------------------
db file sequential read                      1          0 1 microsecond
db file sequential read                      2          0 2 microseconds
db file sequential read                      4          0 4 microseconds
db file sequential read                      8          0 8 microseconds
db file sequential read                     16          0 16 microseconds
db file sequential read                     32          0 32 microseconds
db file sequential read                     64          0 64 microseconds
db file sequential read                    128        191 128 microseconds
db file sequential read                    256       3639 256 microseconds
db file sequential read                    512      71489 512 microseconds
db file sequential read                   1024     838371 1 millisecond
db file sequential read                   2048     887138 2 milliseconds
db file sequential read                   4096      21358 4 milliseconds
db file sequential read                   8192       3625 8 milliseconds
db file sequential read                  16384       1659 16 milliseconds
db file sequential read                  32768       1863 32 milliseconds
db file sequential read                  65536       4817 65 milliseconds
db file sequential read                 131072       3721 131 milliseconds
db file sequential read                 262144          5 262 milliseconds

Now time to look at CPU. The processors are not the latest Intel generation:


Model name:            Intel Xeon E312xx (Sandy Bridge)
CPU MHz:               2593.748

I’ve run same slob.conf except that I reduce the scal to fit in buffer cache and do no updates


Load Profile                    Per Second   Per Transaction  Per Exec  Per Call
~~~~~~~~~~~~~~~            ---------------   --------------- --------- ---------
             DB Time(s):               0.8               2.1      0.00      0.66
              DB CPU(s):               0.8               2.0      0.00      0.65
      Background CPU(s):               0.0               0.0      0.00      0.00
      Redo size (bytes):           8,257.2          20,944.9
  Logical read (blocks):         411,781.5       1,044,502.5
          Block changes:              41.8             106.1
 Physical read (blocks):              10.9              27.7
Physical write (blocks):               3.5               8.9
       Read IO requests:               9.9              25.2
      Write IO requests:               2.7               6.7

That’s 412000 logical reads per seconds per CPU. However I’ve only 0.8 CPU here.

I nearly forgot the great feature of 12c AWR report: the active-html with it’s ‘tetris’ view. Here it is:

EXOSCALE008

Ok it seems I had a little delay at the beginning of the run before it was 100% in CPU. Knowing that, I run a report on a shorter period:


Load Profile                    Per Second   Per Transaction  Per Exec  Per Call
~~~~~~~~~~~~~~~            ---------------   --------------- --------- ---------
             DB Time(s):               1.0               2.1      0.00      2.81
              DB CPU(s):               1.0               2.1      0.00      2.79
      Background CPU(s):               0.0               0.0      0.00      0.00
      Redo size (bytes):           8,518.5          18,255.4
  Logical read (blocks):         518,770.0       1,111,743.4
          Block changes:              41.0              87.9
 Physical read (blocks):              11.8              25.3
Physical write (blocks):               1.2               2.6
       Read IO requests:              11.5              24.7

Here are the numbers then. Up to 520000 logical reads per second per CPU.

That’s not extreme performance, but it’s an acceptable alternative to on-premises physical server. Provisioning is really easy.

Update April 29th, 2016

I realize that the last sentence may be misleading. Actually the performance is not bad at all. I was just comparing with the same tests I did on Oracle Cloud Services where I hit the storage head cache most of the time. The IOPS may need further tests. However the following workload with intensive updates (large buffer cache, PCT_UPDATE=25%) is not bad at all:


Load Profile                    Per Second   Per Transaction  Per Exec  Per Call
~~~~~~~~~~~~~~~            ---------------   --------------- --------- ---------
             DB Time(s):               1.0               0.0      0.00      4.17
              DB CPU(s):               0.9               0.0      0.00      3.88
      Background CPU(s):               0.1               0.0      0.00      0.00
      Redo size (bytes):      38,568,625.6          51,953.1
  Logical read (blocks):         202,771.0             273.1
          Block changes:          97,125.0             130.8
 Physical read (blocks):               4.5               0.0
Physical write (blocks):           2,316.2               3.1
         Executes (SQL):           2,971.5               4.0
              Rollbacks:               0.0               0.0
           Transactions:             742.4

The CPU (according to Kevin Closson) is ok:
https://twitter.com/kevinclosson/status/725798295239561219