Sysbench is a open source product that enables you to perform various system benchmarks including databases. Drizzles performs regression testing of every trunk revision with a branched version of sysbench within Drizzle Automation .
A pending branch https://code.launchpad.net/~elambert/sysbench/trunk_drizzle_merge by Eric Lambert now enables side by side testing with MySQL and Drizzle. On a system running MySQL and Drizzle I was able install this sysbench branch with the following commands.
cd bzr bzr branch lp:~elambert/sysbench/trunk_drizzle_merge cd trunk_drizzle_merge/ ./autogen.sh ./configure make sudo make install
Running the default lua tests supplied required me to ensure drizzle was in my path and that I created the ‘sbtest’ schema. I’ll be sure it add that checking to my future developed benchmark scripts.
$ cd sysbench/tests/db $ sysbench --test=insert.lua --db_driver=drizzle prepare sysbench v0.4.10: multi-threaded system evaluation benchmark FATAL: unable to connect to Drizzle server: 23 FATAL: error 0: Unknown database 'sbtest' FATAL: failed to execute function `prepare': insert.lua:7: Failed to connect to the database
$ drizzle -e "create schema sbtest" $ sysbench --test=insert.lua --db_driver=drizzle prepare sysbench v0.4.10: multi-threaded system evaluation benchmark Creating table 'sbtest'...
And running produces the following results.
$ sysbench --num-threads=1 --test=insert.lua --db_driver=drizzle run sysbench v0.4.10: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 1 Threads started! OLTP test statistics: queries performed: read: 0 write: 10000 other: 0 total: 10000 transactions: 0 (0.00 per sec.) deadlocks: 0 (0.00 per sec.) read/write requests: 10000 (879.68 per sec.) other operations: 0 (0.00 per sec.) Test execution summary: total time: 11.3678s total number of events: 10000 total time taken by event execution: 11.3354s per-request statistics: min: 0.32ms avg: 1.13ms max: 68.74ms approx. 95 percentile: 2.41ms Threads fairness: events (avg/stddev): 10000.0000/0.00 execution time (avg/stddev): 11.3354/0.0
Rerunning the prepare also lacked some auto cleanup to allow for automated re-running.
$ sysbench --test=insert.lua --db_driver=drizzle prepare Creating table 'sbtest'... ALERT: Drizzle Query Failed: 1050:Table 'sbtest' already exists FATAL: failed to execute function `prepare': insert.lua:57: Database query failed
For MySQL
$ sysbench --test=insert.lua --db_driver=mysql --mysql_table_engine=innodb prepare sysbench v0.4.10: multi-threaded system evaluation benchmark Creating table 'sbtest'...
Unfortunately this doesn’t actually create the table in the right storage engine, I had to hack the code to ensure I was comparing InnoDB in each test.
$ sysbench --num-threads=1 --test=insert.l ua --db_driver=mysql run sysbench v0.4.10: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 1 Threads started! OLTP test statistics: queries performed: read: 0 write: 10000 other: 0 total: 10000 transactions: 0 (0.00 per sec.) deadlocks: 0 (0.00 per sec.) read/write requests: 10000 (897.67 per sec.) other operations: 0 (0.00 per sec.) Test execution summary: total time: 11.1399s total number of events: 10000 total time taken by event execution: 11.1084s per-request statistics: min: 0.27ms avg: 1.11ms max: 252.63ms approx. 95 percentile: 2.48ms Threads fairness: events (avg/stddev): 10000.0000/0.00 execution time (avg/stddev): 11.1084/0.00
Armed with a working environment I can now write some more realistic production like tests in Lua.