Fixes come in thick and fast...

Yet another fix and some more minor UI changes.

In fixing some code I regressed some basic functionality. In the last build if you restarted a benchmark from within the swingbench and minibench GUI it gave you an error and you had to restart swingbench to get it going again. This is now fixed in this new build.

I also took the time to add some functionality to enable you to specify Inter and Intra sleep times. You can do this in the “Load” tab as shown below

Inter/Intra Sleep Time Dialogue

It gives me the opportunity to explain the difference between inter and intra sleep times. As the name implies intra sleep times occur “inside” of a transaction. Inter sleep times occur between transactions. Many of the transactions inside of the swingbench “SOE” have sleep times between DML operations (select, insert, update). In some situations this better emulates what happens in some legacy form based systems, this is what is controlled by intra sleep times. However most systems these days tend to utilise web based front ends where DML operations tend to be fired as a single operation when the user submits a form. This approach results in a more scalable architecture with fewer locks being held and for shorter periods of time. Hopefully the following diagram will explain the differences in a clearer fashion.


You can also set the intra and inter sleep time from the command line with the -min (intra min) -max (intramax) -intermin (inter min) -intermax (inter max).

First Update to Swingbench 2.5

Just a small update to swingbench... You can download the new build here

It fixes a few of bugs
  • Incorrect partitioning defaults specified in the oewizard and shwizards configuration files
  • Incorrect profile of transactions for “sh” benchmark
  • “sh” benchmark transaction generated queries for future values that didn’t exist
  • Checks not performed on allowed partitioning values in configuration files for wizard when run in command line
I’ve also added some functionality that should have been put in a long time ago. A drop down list of values for the connection properties. In previous versions of swingbench unless you knew the key values for a connection property it was impossible to add one. The new drop down list should make it much easier.

Pasted Graphic

So the next obvious question is “What are all the connection properties and why did it take you so long to tell us?”. I have no idea why it took so long to tell people what they were. Consider it an over sight but let me try and correct that now.
Connection Properties
This specifies the number of statements to be cached. Valid value is an integer 
Force jdbc to connect to more than one scan listener. Valid values are true or false
Activate Oracle’s Fast Failover connection functionality. Valid values are true or false
Sets TCP_NODELAY of a socket. Valid values are true or false
The remote configurations of Oracle Notification Servers (ONS). Valid values are similar to this “nodes=dbserver1:6200,dbserver2:6200”. See Oracle documentation for more details and examples
The number of ONS servers that jdbc will randomly select from in the advent of a failure. Valid value is an integer
The time taken between traversals of an “ADDRESS_LIST” in the advent of a failure. Specified in seconds
The time queries wait for results before considering that a failure has occurred. Specified in seconds
The number of inserts/updates that are grouped together to improve transaction performance. Valid value is an integer
Number of rows fetched on each round trip to the database. Valid value is an integer


Release of Swingbench 2.5

I’m pleased to announce the release of swingbench 2.5. It has a ton of fixes and new functionality in it but most importantly it has full support for Oracle Database 12c. At this stage I’m going to call it Beta but only because it’s received a limited amount of testing inside of Oracle. Obviously let me know what you think. I’ll try and provide fixes as quickly as possible to any thing you flag up. You can download it here .

Fixes and Enhancements include

  • Fixed a bug where the wizards struggled with some time zones.
  • Fixed a bug where the init() command wasn't called correctly
  • Removed unnecessary stacktrace output when invalid command line parameters are used
  • Fixed an integer overflow where some stats were reported incorrectly
  • Added normal distribution of data to better model real world data in the OE and SH benchmarks
  • Added verbose output (-v) to the wizards when run in command line mode to provide better feedback
  • Increased the maximum heap use by oewizard and shwizard to 2GB in size
  • Updated launch parameters for java to set min and max to avoid unnecessary memory consumption
  • Users can now define their own output date format mask for charbench via a swingbench environment variable (see FAQ)
  • Wizards in graphical mode now display a warning before data generation if there isn't enough temporary space to generate indexes
  • Wizards in graphical mode now display the reason they can't connect to the database
  • Generated data is more representative of real world formats
  • Charts in overview now display values when moused over
  • Support of backgrounding charbench, Unix/Linux only. requires the use of both the -bg swinbench option and "&" operator
  • Fixes and improvements to error suppression
  • The maximum number of soft partitions that can be specified is limited to 48. Values larger than this cause severe performance degradation. This is being looked into.
  • Version 2.0 of the OE benchmark is included (selectable from the wizard).
  • Wizards allow you to specify index, compression and partitioning models where supported (command line and GUI)
  • All scripts and variables used by wizards are listed in the configuration file
  • Benchmark version can be specified on the command line
  • Fixed an issue where specifying max Y values in charts was ignored
  • Support for choosing whether commits are executed client or server side in the SOE Benchmark -D CommitClientSide=true
  • Wizards recommend a default size for the benchmarks based on the size of the SGA
  • The customers and supplementary_demographics table are now range partitioned in the SH schema if the range portioned option is specified
  • New overview chart parameter (config file only)  allows you specify what YValue a chart will start at
  • Wizards allow the creation of schemas with or without indexes
  • The sh schema now allows a partitioned or non partitioned schema
  • Updated XML infrastructure
  • Removed unneeded libraries and reduced size of distribution
  • Errors in transactions can now be reported via the -v errs command line option
  • Tidied up error reporting. Errors should be reported without exception stacks unless running in debug mode
  • Fixed a problem where it wasn't possible to restart a benchmark run when using connection pooling

Example Chart Example for MonitorDB

I’m doing a little testing with UCP (Universal Connection Pooling) and RAC and it’s ways handy to continually monitor where the user connections are going and how they change over time. MonitorDB makes it easy to do this. All you need to so is add another SQL entry to MonitorDB’s config file. Something like this.

SOE Users Logged On SELECT 'Instance ' ||s.inst_id Category, CASE s.inst_id WHEN 1 THEN 'Red' WHEN 2 THEN 'Green' WHEN 3 THEN 'Blue' WHEN 4 THEN 'Pink' END Color , NVL(gv.val,0) value FROM (SELECT * FROM ( SELECT 1 inst_id FROM dual UNION SELECT 2 inst_id FROM dual UNION SELECT 3 inst_id FROM dual UNION SELECT 4 inst_id FROM dual ) ) s, (SELECT inst_id, COUNT(1) val FROM gv$session WHERE username = 'SOE' GROUP BY inst_id ) gv WHERE s.inst_id=gv.inst_id(+) ORDER BY s.inst_id None Line 1 1 true
You can obviously change the colours and instance values etc… but you’ll end up with something like this...

You can download MonitorDB here.

Minor fixes to MonitorDB

I’ve patched MonitorDB. It includes some fixes to stop unnecessary messages on standard out. I’ve also added some functionality that allows you select dedicated connections as opposed to cached connections. Using dedicated connections means each chart gets its own dedicated connection which may helps with complicated queries. It also has the added advantage of cleaning restarting connections after communications are temporarily lost i.e. a database restart.

You specify dedicated or cached connections with the -cc or -dc command line options. For example

$> ./monitordb -dc

Cached connections are the default.

You can download the new version (0.3) here

MonitorDB minor update

I’ve updated monitor DB to encrypt the passwords.

This means that every time you start MonitorDB it will check the password is encrypted and if it isn’t it will encrypt it for you.

So the password element in the config file ail change from




if you want to change it just enter clear text in the password field and the program will encrypt it on startup.

You can download the new version here.

A new member of the family

I’ve just add a new member to the family. MonitorDB. It’s a simple tool that allows you to trivially chart and record the values of a SQL query. You can have as many charts as you want and you can pretty much chart anything as long as it’s expressed in SQL form. Take a look at short description here or download it here
Monitor IO

Using the wizards in comand line mode

I’ve just been reminded that not everybody knows that you can run swingbench in command line mode to use nearly all of it’s functionality. Whilst VNC means that you can use the graphical front end for most operations sometimes you need a little more flexibility. One area that this is particularly useful is when you’re creating large benchmark schemas for the SOE and SH benchmarks via the wizards (oewizard, shwizard). To find out what commands you can use just use the “-h” option. As you can see below there’s access to nearly all of the parameters (and a few more) that are available in the graphical user interface.

usage: parameters:
-allindexes build all indexes for schema
-bigfile use big file tablespaces
-c wizard config file
-cl run in character mode
-compositepart use a composite paritioning model if it exisits
-compress use default compression model if it exists
-create create benchmarks schema
-cs connectring for database
-dba dba username for schema creation
-dbap password for schema creation
-debug turn on debugging output
-debugf turn on debugging output to file (debug.log)
-df datafile name used to create schema in
-drop drop benchmarks schema
-dt driver type (oci|thin)
-g run in graphical mode (default)
-generate generate data for benchmark if available
-h,--help print this message
-hashpart use hash paritioning model if it exists
-hcccompress use HCC compression if it exisits
-nocompress don't use any database compression
-noindexes don't build any indexes for schema
-nopart don't use any database partitioning
-normalfile use normal file tablespaces
-oltpcompress use OLTP compression if it exisits
-p password for benchmark schema
-part use default paritioning model if it exists
-pkindexes only create primary keys for schema
-rangepart use a range paritioning model if it exisits
-s run in silent mode
-scale mulitiplier for default config
-sp the number of softparitions used. Defaults to cpu
-tc the number of threads(parallelism) used to
generate data. Defaults to cpus*2
-ts tablespace to create schema in
-u username for benchmark schema
-v run in verbose mode when running from command
-version version of the benchmark to run

Using these parameters its possible to specify a complete install and drop operation from the command line. For example

./oewizard -scale 10 -cs //oracle12c/orcl -dbap manager -ts SOE -tc 32 -nopart -u soe -p soe -cl -df /home/oracle/app/oracle/oradata/ORCL/datafile/soe.dbf

This will create a 10 GB (Data) schema using 32 threads, use no partitioning and use the soe schema.

You can drop the same schema with the following command

./oewizard -scale 0.1 -cs //oracle12c/orcl -dbap manager -ts SOE -u soe -p soe -cl -drop

I use this approach to create lots of schemas to automate some form of testing… The following enables me to create lots of schemas to analyse how the SOE benchmark performs as the size of the data set and index increase.

./oewizard -scale 1 -cs //oracle12c/orcl -dbap manager -ts SOE1 -tc 32 -nopart -u soe1 -p soe1 -cl -df /home/oracle/app/oracle/oradata/ORCL/datafile/soe1.dbf
./oewizard -scale 5 -cs //oracle12c/orcl -dbap manager -ts SOE5 -tc 32 -nopart -u soe5 -p soe5 -cl -df /home/oracle/app/oracle/oradata/ORCL/datafile/soe5.dbf
./oewizard -scale 10 -cs //oracle12c/orcl -dbap manager -ts SOE10 -tc 32 -nopart -u soe10 -p soe10 -cl -df /home/oracle/app/oracle/oradata/ORCL/datafile/soe10.dbf
./oewizard -scale 20 -cs //oracle12c/orcl -dbap manager -ts SOE20 -tc 32 -nopart -u soe20 -p soe20 -cl -df /home/oracle/app/oracle/oradata/ORCL/datafile/soe20.dbf
./oewizard -scale 40 -cs //oracle12c/orcl -dbap manager -ts SOE40 -tc 32 -nopart -u soe40 -p soe40 -cl -df /home/oracle/app/oracle/oradata/ORCL/datafile/soe40.dbf
./oewizard -scale 80 -cs //oracle12c/orcl -dbap manager -ts SOE80 -tc 32 -nopart -u soe80 -p soe80 -cl -df /home/oracle/app/oracle/oradata/ORCL/datafile/soe80.dbf


Update to CPU Monitor

Just a small update to CPU Monitor to fix some Secure Shell (ssh) issues. You can download it here.