Quantcast
Viewing latest article 5
Browse Latest Browse All 10

Benchmark: MySQL 5.5 vs. MySQL 5.1

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)

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:

Image may be NSFW.
Clik here to view.
TN: Benchmark MySQL 5.5 vs. 5.1 OLTP Simple Results

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:

Image may be NSFW.
Clik here to view.
Graph Benchmark MySQL 5.5 vs. 5.1 OLTP Simple

Graph Benchmark MySQL 5.5 vs. 5.1 OLTP Simple

Der Benchmark-Lauf für den COMPLEX-OLTP-Test erbrachte folgende Ergebnisse:

Image may be NSFW.
Clik here to view.
TN: Benchmark MySQL 5.5 vs. 5.1 OLTP Complex Results

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:

Image may be NSFW.
Clik here to view.
Graph Benchmark MySQL 5.5 vs. 5.1 OLTP Complex

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.


Viewing latest article 5
Browse Latest Browse All 10