Fix for 2.2 of swingbench
I managed to break minibench in my last update of swingbench 2.2. I've uploaded a new build and taken advantage of the opportunity to refresh the libraries. Sadly this will mandate 1.5 as the new JVM. Apologies if this causes any inconvenience.
More fixes for datagenerator
• All menus now working
• Added sizing wizard to menu
• New Column wizard for DB sampler
• lots of other minor fixes
• zip file is now version numbered.
Let me know if this helps
Presentation to the US RAC SIG
I'll be doing a webcast on swingbench to the US RAC SIG on June 4th. I believe it will be starting at 9.30 PT (check the web sit for confirmation). I hope to detail what swingbench is capable of, the best practices when using swingbench and what I'll be doing next. I think Im suppose to be answering questions as well so you'll get a chance to have ago at me for all those annoying bugs....
So if your interested join in and I'll do my best to keep it informative and entertaining.
Sometimes we all make mistakes...
Its not easy keeping an idea on all aspects of swingbench and sometimes I let stuff get through that really shouldn't. I try my best. I made a amateurish mistake on sequence numbers in the order entry bench. I've uploaded a new build of 2.2 which I'll include in the new 2.3 build shortly. If you find these annoying little bugs or potentially big issues drop me a line and I'll do my best to put it right.
A little coordinator/cpumonitor issue
I ran into this issue just recently. I couldn't get swingbench to talk to the coordinator and sadly the large RMI stack traces didn't explain it very well. It turns out that Java RMI expects the hostname and hostname.domain in the /etc/hosts file to be on a separate line to the 127.0.0.1 localhost entry i.e. on the second line.
For example change
127.0.0.1 localhost localhost.localdomain saturn saturn.planets
127.0.0.1 localhost localhost.localdomain
10.211.55.4 saturn saturn.planets
Making this simple modification gets everything working as expected. This problem is common in a DHCP environment (not ideal for benchmarking) where you acquire ip address and potentially hostnames dynamincally. Its good practice to keep them on separate lines anyway.
I know I had promised an update of the front end to swingbench in my next release however its been pointed out to me that I managed to break my TimesTen support in one of the earlier releases. I've just uploaded a new build that should fix these issues. I've also uploaded a simple TimesTen walkthrough. It can be found here
So I haven't released much in the way of an update to swingbench lately mainly because work has been so busy...
However between meetings I put together a little program that parses Oracle trace files. Now I know TKProf does a fine job of this but I've never been really comfortable with having to continually rerun TKProf to change the ordering and filter out classes of statements. This came to a head just recently after looking through a big trace file and trying to figure out what SQL to work on first. I also thought that perhaps I could use a richer user interface to give a better overview on what has happened a particular run. So I started with the intention of figuring out how to parse the file and come up with some ideas on what to with the results... This turned out to be pretty trivial because of its structure and Java's regular expression support. With that taking much less time than expected I put them into a Java Swing JTable just to verify the results, which lead on to the next thing and then the next.... Needless to say the code is far from perfect but it does give a feel as to what could be achieved. If there is no interest I'll stop now and go back to finishing swingbench 2.3.
So In summary what does it do
• Parse trace files.
• Profile the data via a bar of the right had side of the scroll bar.
• Supports dynamic filtering and sorting of the data.
• Highlight the 5 worst performing pieces of SQL (elpased, cpu, physical etc)
What I'd like to add to it
• highlight concurrent SQL
• Explain Plans
• Display bind variables
• dump sql to flat files
• generate load files for swingbench
However unless theirs interest I probably won't bother..
You can download the code here
Leave your comments here
Performance fix for datagenerator
Apologies for those that have already downloaded swingbench. I managed to engineer a bug into the latest build... I removed code responsible for array binding on inserts into the database. I've put it back in and, as you might expect, makes a significant difference to this new functionality. In the next couple of days I intend to document some simple findings illustrating the difference between the two approaches.
New build of datagenerator
I've uploaded the latest build of datagenerator. New features include
- User definable number of threads
- Data insertion directly into the database (Oracle)
- Ordered generation of data (largest first)
- Lots and lots of small bug fixes
Apologies for not updating swingbench recently but I've been struggling with the amount of "proper" work at the moment. I'll try and find some time over the next few week to include the updates I promised. Let me know if you encounter any problems in the code... now is the time to get them fixed.
New build of swingbench 2.3, build 144
I've just uploaded a build of new swingbench. This fixes a whole load of internal bugs that shouldn't have been that obvious to most people. This should be the last before I release the changes to the front end. This hopefully should allow all swingbench parameters to be maintained from a graphical front end.
Fix for DSS benchmark
I've included a fix for the DSS benchmark. The code used to label modules for services opened cursors without closing them properly. This prevented the benchmark from running for any period of time.
Fix for timezone support in datagenerator
I've included a fix for datagenerator that allows it to load the soe.xml and sh.xml file regardless of timezone the user is running in. I've also changed the default config file to a simple version to try and prevent this problem happening in the future.
One of the problems when buiding a bespoke application is that you can never find a icon that reperesents exactly the action you need. Sure there are hundreds of sites on web that have "free" icons but these tend to be designed for the desktop. You can sometimes find sets that look very professional and you'd be proud to have them in your application. However you still have the issue that you don't only need icons to represent "file open" or "delete record" but also ones to represent the new action that is going make your application a best seller and the last think you need is a icon that sticks out like an ugly sore thumb.
So your left with a couple of choices. Go ahead and build that expensive icon set and hope that no one notices your child like attempts at graphic design. Or bite the bullet and commit your self to buiding the whole set your self. Now this not something you should attempt if you have no artistic aptitude or are short of patience. To be fair I've always been interested in graphic design but have never had the inclination or need to commit to buiding my own icon set. That was until I started working on datagenerator and swingbench. Im a one man team and I know many of you will be questioing the sense in spending time working on icons when it could better be invested in fixing bugs or working on new features, however one of my objectives when I started working on thes projects was to touch on a number of disciplines that my day to day job (core database) doesn't allow.
So once you've committed yourself to building your own bespoke set what tools do you use. Well theres no shortage of tools from bespoke icon editors to top end tools such as Adobe Illustrator and Photoshop, Paintshop pro etc. I've shyd away from icon editors in the past simply because I find them to restrictive. You find yourself spending to much time trying reproduce effects such as shadows and gradients which are pretty much the defacto standard on a modern desktop. I use two platforms these days, My Apple iMac and a Linux notebook. If I was designing icons and other graphics for a living I would invest the big bucks for a product like Adobe Illustrator... I wouldn't even hesitate, from my limited experience nothing comes close, however I dont do this for a living and it doesn't make any sense to spend a couple of thousand pounds for a dozen icons (although if someone has a spare license lying around...).
So Ive comitted to Inkscape and Im very impressed so far. It appears rock solid, has ports for MacOS and Linux, has tools for viewing your designs as they would appear as icons and has some genuinely inovative features. However it does have some flaws.... The documentation is very weak, some of the dialogues are confusing at best and its not a native port to MacOS (that really would set the cat amongst the pigeons).
That set Ive started work and its pretty straight forward to put together some consistent icons. Ill post the results shortly... don't laugh
New build of datagenerator
I've uploaded a new build of datagenerator (46). The update to this build is primarily to include new debug code to try and diagnose a issue with reading the default config files shipped with datagenerator. This prevents users from reading the data inside of the xml file. This appears to be a national language issue since the data is shipped in UK format. If you have this issue, uncomment the debug line in the shell script or bat file that starts datagenerator and post the output to me via the comments page.
Minor Swingbench update to 2.3, build 125
Hi just a minor patch update to fix a few minor updates. Yup I do make changes based on feedback. Thats assuming I have time... Things are slowing down just a little at work as people head off on holiday so Im hoping to get 2.3 finished soon.. just the UI changes now... I'll be at Oracle HQ in the US next week so Im not likely to be able to respond to much email. For any of my work colleagues that need to get in touch I'll be on the mobile...
Back to the minor fixes
- Sorted out the save, save buttons so they should work as expected.
- Now a Transactions per second option for charbench(if this is useful I'll include it inside of swingbench and minibench)
- Benchmark name now include on window title for swingbench
DSS benchmark uploaded
I've just uploaded a new build of swingbench and datagenerator to the website. They can be downloaded here
. The reason for the joint release is that they both provide support for a new DSS benchmark. I've described how to install and run the benchmark here
. The benchmark still needs work and testing to determine some standard metrics but it hangs together. Let me know what you think here
New DSS benchmark available (or nearly).
Over the last few days I've been putting together swingbench's first DSS benchmark. It uses datagenerator
to create the schema and then a new config file to generate the load. The only reason I haven't posted it yet is that our cluster is currently in pieces and is slowly being put back together so I'haven't had a chance to test it on a large scale machine. Im certain of a few things. It should eat I/O and CPU. I haven't included any materialized views to improve perfomance simply because in the past I've been asked for a benchmark to test the I/O sub system, I think this is it. It currently needs a little work to get it to scale to large sizes but I'll post instructions. The ultimate aim is to deliver three sizes 100GB, 500GB and 1TB. There's no reason why they couldn't be bigger its just that I'll lack the resource to test it. If you'd like to give it a spin drop me a line and I'll send you the code. Regardless I hope to post the code by the end of the week.
Datagenerator update to build 31
I've been slowly rounding off some of the rough edges in datagenerator. In this release I've fixed a few bugs and provided a wizard to size tables up in a simpler fashion (hint its the new button on the tool bar). I've also included the ability to store data in side of the config file. This is really useful if you have to take reference data from a reversed engineered schema. To demonstrate this I reverse engineered the oracle "sales history" schema and included the reference data for "TIMES","PRODUCTS" etc. The whole schema including reference data can now be shipped in a single file. I've included this file in this build (sh.xml in bin/winbin directory). This means you should be able to generate a multi terabyte "sh" schema.... This functionality will fome the basis of a new DSS benchmark in the next few weeks for swingbench. Let me know if you encounter any problems.
Oh and I fixed a stupid scripting bug the windows bat file to lauch datagenerator...
Swingbench update to build 117
Nothing amazingly new in this build other than some fixes. These relate to
- Opening new config files left the old configuration in memory
- The default config in windows was invalid (and no one mailed me... shame)
- Fix to work around an Oracle connection pooling bug
- No reports generated unless a System username/password was included in the config file
Im currently working on, mostly in my spare time, the creation of a swingbench DSS benchmark and the update of the UI to support all of the parameters currently hidden in the config file. Let me know if you encounter problems with this build.
IllegalMonitorState Exception in Datagenerator on Itanium.
I've encountered a weird bug... not sure if its my fault or the the JVMs. Basically when running the latest version of datagenerator on a multi CPU Itanium box I get this exception thrown after a (seemingly random) period of time. This only happens on an Itanium machine. The other variable here is that because its Itanium I have to use the JRockit 1.5 JVM. The code seems to work fine on every other multi CPU environment I've tried... Has anyone else had this problem?
Walkthrough for datagenerator available
I've just published a walkthrough for datagenerator here
. It should help in figuring out what datagenerator is capable of. This will probably be the way I publish all documents in the future...
Minor update to Datagenerator
I've fixed a few minor issues with the build I put up last night. The new release has a build number to enable you to more easily track what's new. I also fixed a minor bug with the environment variables in the windows build.
Datagenerator 0.3 release
I've just uploaded datagenerator 0.3 to the downloads
page. Its a big step forward. Apart from being multithreaded and generally much faster it includes a wizard that allows you to reverse engineer a schema... currently it only reverse engineers the tables and primary keys but I'll include more functionality over time. I've used it to build vey large schemas for the order entry benchmark much faster than I was perviously able to. In the next couple of days I'll post a script and instruction on how to do this.. In the mean time enjoy
Update to Swingbench 2.3 Beta
Further fixes for connection pooling and new support for the order entry schema to be build without partitioning.
Swingbench 2.3 Beta available
I've just posted swingbench 2.3 to the downloads
page. This build still needs some work but it has some genuinely useful features.
- Update to frontend of "minibench"
- New simple "Stress Test" benchmark for both Oracle and TimesTen
- TimesTen support
- User defineable length of benchmark run
- Better statistics in reports output
- Benchmark comparison tool
- Improved connection pooling and fAN support (via swingconfig file only)
- Minor changes to swingconfig.xml
- Build numbers for each release
- User selectable timings i.e. measurements in seconds, centiseconds, millseconds, microseconds etc.
The new runtime functionality and bmcompare utility allow for large complex benchmark runs and comparisons between individual runs. The new minibench UI provides a richer experience for those wishing to run the swingbench environment in graphical mode but without the overhead of the full blown interface.
Documentation (online and pdf) to follow shortly.
Swingbench 2.3 should be ready shortly features a new tool called bmcompare which allows you to compare runs of benchmarks... Its pretty simply currently but I like it. Its simplifies the job of brining all of the data together. It will be especially useful for some of the users of swingbench how use swingbench as a regression test tool.
So whats new in Swingbench 2.3
I've been putting the final touches on the 2.3 release of swingbench. So far the features that have made it in are
- TimesTen support
- Timer support. This allows you to run the benchmark for a given time
- User selectable timings i.e. measurements in seconds, centiseconds, millseconds, microseconds etc.
- Code modification to support 1.5
Im still also hoping to include a utility that will provide side by side comparison of benchmark runs. For example this will allow you to run six benchmarks and compare the differences between each one. So you could increase the user count by 50 percent each run and then determine what difference this makes to the server. It will be pretty simple at first but Im hoping it will become more sophisticated over time.
Things that aren't likely to make it but will be in 2.4
- Data warehosuing benchmark
- Update to clusteroverview
Update to Swingbench to support 1.4 JVM
Apologies but I've posted another minor change to swingbench to support the 1.4 JVM. You should only download a new build if you don't have access to a 1.5 JVM.
What next for swingbench?
Im at a sort of a crossroads with swingbench and Id like some feedback on what course I should follow next. There are a number of features I've been promising for a while
- A new data warehousing benchmark, this also requires I get datagenerator into a more complete state.
- Better multiple load generator support, clusteroverview hasn't really received much attention in the recent point releases
- Better reporting, I've always planned to integrate a mini statspack so that each run results in a more complete break down on not just the results but what happened to the database
- A html front end, I could do this either by integrating it into Enterprise manager (not as hard as you think) or writing a bespoke JSP front end.
- HTTP load generation support, I've been promising this for a while and have written the engine and have nearly got the code in a state where I could drop it in. But I've a feeling the market is a wash with HTTP load generators.
- None of the above and just tighten up the code.
If you have strong feelings on any of these drop me a comment
Minor update to swingbench 2.2
I've just updated swingbench 2.2 with a few minor bug fixes.. It sorted out one or two issues with the wizards used to create the benchmark schemas.
Swingbench 2.2 is now production
After finding a few spare hours I believe that 2.2 is now ready to be considered stable.... There are a few non serious few bugs but I'll fix those as I find time. Let me know what you think...
J2SE 5.0 and Swingbench
I've begun looking at the internal of the swingbench code. Its not massively complicated but it is a little opaque. Its was written a long time ago when many of Java's constructs were new to a hardened C programmer. Im slowly going through the code and tidying it up, for valid reasons which I'll come to in a second. However it has given me the chance to use the functionality offered in J2SE 5.0 primarily enumerators and generics. These tidy up the code a lot and make it almost readable. Its also made me more determined to re-factor the code and make it much cleaner and modular.
The reason Im migrating to J2SE 5.0 is purely to support Oracle's new in memory database TimesTen. To measure its response time accurately I need microsecond timings. Since J2SE 5.0 offers nano second timing support where the platform supports it it made sense to do it all in one go. Sadly its a much bigger modification than I indented since it effects most of the code base. Still its proving interesting. Expect TimesTen support in a build almost immediately after 2.2 goes production.
Swingbench Version 2.2 (release candidate)
Swingbench version 2.1h is now 2.2. Im certain I've included enough new functionality to justify this change. Over the last week or so I've managed to add a whole raft of new features and fixes that should simplify its use. There won't be any new features in this current release just bug fixes. The intention is to have it stable and the doc finished by the end of December. I've also updated the swingbench manual, I'll update clusteroverview's doc shortly. So in summary new in 2.2...
New in 2.2
- A new lightweight graphical load generator called "minibench"
- The coordinator now has a number of command line options (start, stop, status, run, halt)
- The coordinator can now be run in ether graphical or character mode
- The charting engine now uses Oracle's BIBeans graphing technology
- Better exception handling and error messages in both swingbench and clusteroverview
- Users can now turn off jumping to the events panel in swingbench
- The user chart in clusteroverview now allows users to specify monitored users
- Swingbench can logon/logoff users between transactions (experimental)
- Minor changes to swingconfig.xml
- New Look and Feel
- charbench/swingbench/minibench now have a number of command line options allowing them to override configuation file settings. This should simplify configuration.
- CPU monitor (accessible via coordinator)
- charbench can now display transaction/cpu load in sar/vmstat like format
- swingbench can now display graphically display cpu load
- Lots of fixes to the benchmark install wizards
- order entry benchmark can now be scaled to 100GB
- CPU monitor for database nodes in clusteroverview
- Simple CPU monitor in minibench
Still to come
- Localisation support
- TimesTen support
- Simple generic load test
- DSS benchmark
New release of DataGenerator
Just released a new build of Datagenerator. I've stuck a graphical front end on it so its much easier to use now. Its never going to be amazingly fast because of its generic nature. What Im aiming to achieve is to allow the user to reverse engineer a schema and then "Super Size" it. The main modivation for this utility is to provide a benchmark for datawarehousing using swingbench that dosn't involve downloading a terabyte of data. As to whats new in it
* New graphical front end.
* New "Enumerator" data generator type
* Some bug fixes
Not much, but things have been pretty busy at work. The implementation of the reverese engineering functionality will depend on how long I can avoid doing all of the work on swingbench I've promised people.