database performance

The backend unit tests provided a base on which we built more extensive database performance tests, covering many aspects of database performance using JDBC on Linux.

You can download the full PDF report here:

Format Size UK Download US Mirror Hosted by Rack Sense
Zipped PDF
(best for Windows users)
4.8MB UK d/l US d/l
gzipped PDF 5.2MB UK d/l US d/l
Bzipped PDF 2.3MB UK d/l US d/l
Zipped Postscript
(best for Mac users)
4.8MB UK d/l US d/l
gzipped Postscript 5.2MB UK d/l US d/l
Bzipped Postscript 2.3MB UK d/l US d/l

PDF viewers have a zoom function which can be quite useful to view the legends and details on the graphs.
We appreciate all your comments and will use the feedback to improve the next report.
Please note that these tests are NOT transactional, so when performance is compared - which is only part of the report, MySQL's MyISAM engine (which does not support transactions) should have an edge, and it does - but not as much as one would expect.


Preparing to run the tests yourself:

  • Download the test code binary jar and place it ./lib/
  • Download the junit/ant test script
  • Define the database connection using a simple text file (example here) in ./build/bin/config/db-connection.properties
  • Place the required jar libraries (JNDI, database driver, etc..) in ./lib

Run the tests:

ant -f test.xml junit.dbperf -Dstats.dir=./stats -Ddatabase=db-connection -Djunit.dir=./junit

The test sample data will be placed in the './stats' directory

Loading the samples into the database:

ant -f test.xml load.data -Dstats.dir=./stats -Ddatabase=db-connection-filename -Djunit.dir=./junit

Generating your own graphs:

ant -f test.xml report.gui -Ddatabase=db-connection-filename

Note: you will obviously need to define a new database connection file for each database that you test, but keep the same database for loading the samples!
Beware that the gui can use up a lot of memory as it loads all the records into memory.