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.

6db6b24e689710900f82c65055a214b1

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).
Comments

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 PropertiesDescription
StatementCaching
This specifies the number of statements to be cached. Valid value is an integer 
DNSLoadBalancing
Force jdbc to connect to more than one scan listener. Valid values are true or false
FastFailover
Activate Oracle’s Fast Failover connection functionality. Valid values are true or false
TcpNoDelay
Sets TCP_NODELAY of a socket. Valid values are true or false
OnsConfiguration
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
MaxONSConfiguration
The number of ONS servers that jdbc will randomly select from in the advent of a failure. Valid value is an integer
TcpConnectionTimeout
The time taken between traversals of an “ADDRESS_LIST” in the advent of a failure. Specified in seconds
ReadTimeOut
The time queries wait for results before considering that a failure has occurred. Specified in seconds
BatchUpdates
The number of inserts/updates that are grouped together to improve transaction performance. Valid value is an integer
FetchSize
Number of rows fetched on each round trip to the database. Valid value is an integer


Comments

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
Comments

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.

<MonitoredSQL>
            <Description>SOE Users Logged On</Description>
            <SQL>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</SQL>
            <ProcessingBetweenExecutions>None</ProcessingBetweenExecutions>
            <ChartType>Line</ChartType>
            <DivideBy>1</DivideBy>
            <RefreshRate>1</RefreshRate>
            <Enabled>true</Enabled>
</MonitoredSQL>


You can obviously change the colours and instance values etc… but you’ll end up with something like this...

ChildMain

You can download MonitorDB here.
Comments

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
Comments