Friday, March 27, 2009

PBXT is fast, no kidding

Paul's article on PBXT performance prompted me to test it again on one of my benchmark servers. I use a 16-core server with a modified version of sysbench. The modified sysbench does 2X the work per transaction as normal sysbench, so be careful if you compare these results to your results.

I have tested PBXT before and it scaled great but had more overhead than InnoDB. Well, it still scales great but the overhead problem has been fixed. PBXT is very fast on this benchmark, faster than any enhanced version of InnoDB that I can produce at this point. Granted this is just one benchmark, but it is a great achievment.

Results are here. This displays sysbench throughput (transactions per second) for 1 to 64 concurrent users. All servers are compiled with gcc -O2. The versions listed on the chart are:
  • 5037goog - MySQL 5.0.37 + the Google patch + tcmalloc, using InnoDB
  • 5131pbxt - MySQL 5.1.31 + tcmalloc + the latest PBXT code, using PBXT
  • 5131inno - MySQL 5.1.31 + tcmalloc + the 1.0.3 plugin for InnoDB, using InnoDB
  • 5075myisam - MySQL 5.0.75 + tcmalloc using MyISAM
Most or all of the early work on InnoDB, PBXT and perhaps MyISAM were done by one person. Is that what it takes to produce a great storage engine?

Update: results from Falcon compared to the InnoDB 1.0.3 plugin.
  • 5131_inno - 5.1.31 + tcmalloc + InnoDB 1.0.3 plugin + InnoDB
  • 6bzr_facon - mysql-6.0-falcon from launchpad + tcmalloc + Falcon
  • 6010_facon - 6.0.10-alpha + tcmalloc + Falcon
  • 609_falcon - 6.0.9-alpha + tcmalloc + Falcon
Update: results from the anonymous DBMS p.

Update: details on the test

sysbench command line:
  •  sysbench with changes from me to support --oltp-secondary-index
  • --test=oltp
  • --oltp-read-only
  • --oltp-table-size=2000000
  • --max-time=60
  • --max-requests=0 
  • --mysql-table-engine=$e 
  • --db-ps-mode=disable 
  • --mysql-engine-trx=yes
  •  --oltp-secondary-index
  • --num-threads={1 .. 64}
my.cnf settings:
  • table_cache=2048
  • join_buffer_size=64K
  • record_buffer=128K
  • sort_buffer=2M
  • skip-name-resolve
  • max_heap_table_size=100M
  • tmp_table_size=100M
  • max_tmp_tables=100
  • max_connections=500
  • thread_cache_size=100
  • pbxt-record-cache-size=1G
  • pbxt-index-cache-size=1G
  • innodb_flush_log_at_trx_commit = 2
  • innodb_log_files_in_group=2
  • innodb_log_buffer_size=10M
  • innodb_additional_mem_pool_size=100M
  • innodb_lock_wait_timeout=50
  • innodb_data_file_path = innodb_data1:200M:autoextend
  • innodb_buffer_pool_size=1000M

4 comments:

  1. Nice results.... small teams can do a lot, and 1 person is definitely a small team :)

    ReplyDelete
  2. This could be regarded as a troll question, but have you tried Falcon any time recently? Just curious how it's faring now.

    ReplyDelete
  3. Updated with a few results from Falcon

    ReplyDelete
  4. Can you list out the my.cnf and sysbench parameters you are specifying for your tests? Thanks.

    ReplyDelete

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.