Das MySQL 5.5 auf Servern mit vielen CPU-Cores mehr Transaktionen als MySQL 5.1 durchsetzt, kann man vielen Benchmarks im Internet entnehmen. Allerdings werden bei diesem Benchmarks meist Server mit 32, 48 oder sogar 64 CPU-Cores eingesetzt, die nur in großen und sehr großen Unternehmen Verwendung finden. In kleinen und mittelständigen Unternehmen werden aber im Normalfall eher Single- oder Dual-CPU-Sockel Server verwendet, die mit 4-16 CPU-Cores aufwarten können. Welchen Leistungszuwachs kann bei dieser Server-Klasse erwartet werden? Diese Frage soll der folgende Benchmark klären.
Die Ausgangssituation:
Hardware:
Server: HP DL380 G7
2 x Intel® Xeon® Processor X5660 (6 Core) 2,8 GHz
56 GB RAM (DDR3-1333/PC3-10600)
HP QLogic Dual 8 GB FC-HBA
3 x HP 146GB 6G SAS 10K (Raid 1 + Hot Spare)
SAN:
2 x Qlogic Sanbox 5800 (Multipathing)
Storage:
1 x Netapp FAS3240 FAS3240 with Expanded I/O
24 x 600 GB SAS HDD (2 Hot Spares)
Clik here to view.

Benchmark Hardware Setup
Software:
Red Hat Enterprise Linux 6.1 (64 Bit)
MySQL 5.1.59 Community Edition (x86_64) RPM-Paket
MySQL 5.5.17 Community Edition (x86_64) RPM-Paket
MySQL Konfiguration (auszugsweise)
MySQL 5.1
... # InnoDB Section ignore-builtin-innodb innodb_file_format = barracuda plugin-load=innodb=ha_innodb_plugin.so;innodb_trx=ha_innodb_plugin.so;innodb_lock_waits=ha_innodb_plugin.so;innodb_locks=ha_innodb_plugin.so;innodb_cmp=ha_innodb_plugin.so;innodb_cmp_reset=ha_innodb_plugin.so;innodb_cmpmem=ha_innodb_plugin.so;innodb_cmpmem_reset=ha_innodb_plugin.so innodb_file_per_table innodb_buffer_pool_size = 4G innodb_additional_mem_pool_size = 32M innodb_log_file_size = 256M innodb_log_buffer_size = 64M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 innodb_open_files = 1024 innodb_file_format = Barracuda
MySQL 5.5
... # InnoDB Section innodb_file_per_table innodb_buffer_pool_size = 4G innodb_buffer_pool_instances = 2 innodb_additional_mem_pool_size = 32M innodb_log_file_size = 256M innodb_log_buffer_size = 64M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 innodb_open_files = 1024 innodb_file_format = Barracuda innodb_flush_method = O_DIRECT innodb_read_io_threads = 8 innodb_write_io_threads = 8 innodb_io_capacity = 500 innodb_max_dirty_pages_pct = 60 innodb_purge_threads = 1
Die Konfiguration des MySQL 5.1 / MySQL 5.5 Servers unterscheidet sich nur in der InnoDB Sektion. Während bei MySQL 5.1 das InnoDB Plugin explizit geladen wird, ist bei MySQL 5.5 das Plugin schon standardmäßig eingebaut. Weiterhin werden in der MySQL 5.5 Konfiguration einige neue Parameter gesetzt, wie z.B. innodb_buffer_pool_instances oder innodb_purge_threads, die erst seit dem 5.5 Release verfügbar sind.
Der Test:
Als Benchmark-Werkzeug kam wie immer der OLTP-Test von sysbench zum Einsatz. Der OLTP Test wurde je MySQL 5.1/5.5 Konfiguration jeweils einmal im SIMPLE- als auch einmal im COMPLEX-Mode ausgeführt. Bei jedem Durchlauf wurden dabei folgende Schritte ausgeführt:
1. Anlegen einer Tabelle mit 6000000 Einträgen, was einer Datenmenge von 1,4 GB entspricht
2. Simple/Complex-OLTP-Benchmark mit $num_threads ausführen, wobei $num_threads für die Anzahl der gleichzeitigen Threads steht.
3. Nach jedem Durchlauf wird die Tabelle gelöscht und $num_threads um 25 Threads erhöht.
Das sieht dann wie folgt aus:
# create table sysbench --test=oltp --db-driver=mysql --oltp-table-size=6000000 --mysql-user=root prepare # run Benchmark sysbench --num-threads=$num_threads --max-requests=30000 --test=oltp --db-driver=mysql --mysql-user=root --oltp-test-mode=complex/simple run # drop table $SYSBENCH --test=oltp --db-driver=mysql --mysql-user=root cleanup
Das Testergebnis:
Nachdem der Benchmark-Lauf für den SIMPLE-OLTP-Test abgeschlossen, erhielten wir folgende Ergebnisse:
Clik here to view.

Benchmark MySQL 5.5 vs. 5.1 OLTP Simple Results
Im Durchschnitt konnte MySQL 5.5 circa 1300 Transaktionen/Sekunde mehr durchsetzen als MySQL 5.1, maximal 6100 Transaktionen/Sekunde, minimal -1000 Transaktionen/Sekunde.
Grafisch aufbereitet, sieht das ganze dann wie folgt aus:
Clik here to view.

Graph Benchmark MySQL 5.5 vs. 5.1 OLTP Simple
Der Benchmark-Lauf für den COMPLEX-OLTP-Test erbrachte folgende Ergebnisse:
Clik here to view.

Benchmark MySQL 5.5 vs. 5.1 OLTP Complex Results
Im Durchschnitt setzte MySQL 5.5 hier -13 Transaktionen/Sekunde weniger durch, als MySQL 5.1, maximal 420 Transaktionen/Sekunde, minimal -700 Transaktionen/Sekunde.
Auch dieser Benchmark wurde grafisch aufbereitet und das Ergebnis sieht wie folgt aus:
Clik here to view.

Graph Benchmark MySQL 5.5 vs. 5.1 OLTP Complex
Fazit:
Im SIMPLE-OLTP-Test hat MySQL 5.5 bei diesem Benchmark klar die Nase vorne. Nur bei 425,500,625 und 650 gleichzeitigen Threads wurden weniger Transaktionen/Sekunde durchgesetzt, als bei MySQL 5.1.
Im COMPLEX-OLTP-Test hatte hingegen MySQL 5.1 die Nase knapp vorne und konnte die besseren Ergebnisse erziehlen. Allerdings sind die Abweichungen ab 200 gleichzeitigen Threads so marginal, dass sie kaum eine Rolle spielen dürften.
Einem Upgrade von MySQL 5.1 auf MySQL 5.5 dürfte aus Performance-Sicht bei diesem Hardware/Software-Setup nichts im Wege stehen.
Nachtrag:
Wie Ihr an den Versionsnummern der verwendeten MySQL-Installationen sicherlich erkannt habt, ist der Benchmark schon einige Monate alt. Ich bin aber leider erst jetzt dazu gekommen, die Ergebnisse in diesem Post zusammenzufassen.