MySQL-Benchmark mittels sysbench

Die im Artikel Server-Benchmark mittels sysbench beschriebenen Benchmarks von sysbench testen die einzelnen Komponenten eines Servers: Die CPU, den RAM und die Festplatte.

Diese Werte können hilfreich bei einem Vergleich von verschiedenen Server-Angeboten sein, spiegeln aber nicht unbedingt die Realität wieder in die der Server eingesetzt wird. Stattdessen empfiehlt es sich einen Benchmark auf einer realen Server-Anwendung durchzuführen.

In diesem Artikel zeige ich euch, wie ihr die Performances eines MySQL-Servers ermitteln könnt. Der ermittelte Wert kann sowohl genutzt werden, um den MySQL-Server zu optimieren, als auch um verschiedene Server-Angebote miteinander zu vergleichen.

MySQL installieren

Sofern noch nicht passiert ist, müsst ihr als erstes den MySQL-Server installieren. In diesem Artikel gehe ich von einem aktuellen Ubuntu-System aus. Dort könnt ihr den MySQL-Server wie folgt installieren:

MySQL-Konfiguration optimieren

Für einen realistischen Vergleich kann es sich empfehlen, die MySQL-Konfiguration zu optimieren. Eine ausführliche Anleitung für MySQL 5.7 findet ihr hier: MySQL 5.7 optimieren.

Für meine Benchmarks habe ich folgende MySQL-Konfiguration gewählt. Speichert diese in der Datei
/etc/mysql/conf.d/innodb.cnf ab:

Den Buffer für InnoDB ( innodb_buffer_pool_size ) solltet ihr auf ca. 50% – 70% des RAMs setzen. Da der getestete vServer 32GB RAM hatte, habe ich hier 16 GB RAM gewählt.

innodb_log_file_size und innodb_log_buffer_size bestimmen die Buffer für Schreibvorgänge. 256MB sollten ausreichen.

Der Parameter innodb_flush_log_at_trx_commit = 0 bestimmt dass Änderungen nicht unmittelbar auf die Festplatte geschrieben werden, sondern erst nach 1 Sekunde. Dies kann deutlich die Performance des MySQL-Server steigern.

Für den Vergleich zwischen verschiedenen Servern ist es wichtig, dass die Konfigurationsdateien ähnlich sind. Den innodb_buffer_pool_size könnt je anpassen an den verfügbaren RAM je Server.

Nach der Änderung der Konfigurationsdatei solltet ihr den Server neustarten:

Sysbench installieren

In meinen Tests habe ich Ubuntu 16.04 als Betriebssystem verwendet, dort lässt sich sysbench in Version 0.4.2 einfach installieren:

Auch bei anderen Betriebssystem lässt sich sysbench oftmals einfach installieren.

Wichtig: Die nachfolgenden Befehle funktionieren nur mit sysbench 0.4.2 und 0.5. Leider wird bei manchen Linux-Version sysbench in Version 1.x installiert. Version 1 unterscheidet sich komplett zu der 0.4.2. Version und meiner Meinung nach ist neue Version von sysbench kaum zu gebrauchen.

So könnt ihr eine spezielle Version von sysbench installieren:

Testdatenbank erstellen

Für den Performance-Test mittels sysbench solltet ihr die Datenbank sbtesterstellen. Dies geht z.B. indem ihr euch einloggt in den lokalen MySQL-Server ( mysql -u root) und den SQL-Befehl create database sbtest; ausführt.

Sobald ihr die Datenbank angelegt habt, könnt ihr folgenden Befehl in der Shell ausführen:

Dies erstellt eine Tabelle mit 25 Millionen Einträgen, was ca. 5,6 GB an Daten entspricht. Ihr könnt den Wert anpassen um größere oder kleinere Datenbanken zu testen.

MySQL-Benchmark

Mit der erstellen Tabelle könnt ihr nun einen Lasttest durchführen:

Bei diesem Test wird über 64 paralelle Verbindungen (–num-threads=64) auf den MySQL-Server zugegriffen und es werden verschiedene SQL-Befehle auf der zuvor erstellen Tabelle ausgeführt. Der Test läuft ingesamt 300 Sekunden (–max-time=300).

Das Ergebnis sollte wie folgt aussehen:

Das wichtige Ergebnis steht in Zeile 20. Der MySQL-Server kann auf diesem vServer im Schnitt 1182 Transaktionen pro Sekunde durchführen. Je höher das Ergebnis, desto schneller / besser euer Server.

Auch wenn der MySQL-Test etwas komplexer in der Durchführung ist, so misst dieser sehr gut die komplette Performance eines Servers in einem realistischen Szenario, da die SQL-Befehle sowohl den RAM, die Festplatte und die CPU beansprucht.

Allerdings lassen sich mit dem Test fairerweise nur Server vergleichen, die etwa gleich teurer sind. Die obigen Zahlen stammen von einem Hetzner vServer mit 8 vCores und 32 GB RAM für ca. 60 Euro / Monat. Günstigere Server sollten entsprechend geringere Zahlen bzgl. den Transaktionen pro Sekunde zeigen.