Domainfactory ist wirklich ein sehr guter Hoster, den ich mit gutem Gewissen empfehlen kann. Wenn man bei DF eine Managed-Server hat und bei System (wie Magento) mit vielen Inno-DB Tabellen verwendet, können bestimmte Prozesse extrem lange dauern. Gerade beim direkten Zugriff auf die Datenbank, zum Beispiel über eine Schnittstelle.
Den folgenden Absatz habe ich der Infomail von DF entnommen:
Domainfactory setzt auf das Dateisystem ext4, bei diesem Dateisystem ist eine Konsistenz-Prüfung (sogenannte „barriers“) aktiv, die jeden Schreibvorgang validiert. Dies erhöht die Datenintegrität und Datensicherheit, hat jedoch auf Auswirkungen auf die Schreib-Performance, die sich jedoch im normalen Betrieb kaum bemerkbar machen. In Verbindung mit der MySQL-Tabellen-Engine InnoDB kommt es hierbei jedoch zu einer Verlangsamung der InnoDB-Schreibaktionen. In den Standard-Einstellungen, die von den Entwicklern empfohlen werden, wird jede InnoDB-Schreibaktion (UPDATE, INSERT) direkt auf das Log auf der Festplatte synchronisiert. Wenn hier nun viele solcher Aktionen durchgeführt werden, wie dies z.B. beim Import eines Dumps oder Änderungen im Backend eines CMS-Systems wie Typo3 der Fall ist, dann verlangsamt sich hier der gesamte Vorgang, da jeder einzelne Schreibzugriff eine geringe Verzögerung aufweist….
Es gibt hier nun jedoch die Möglichkeit die Einstellungen des MySQL-Servers so anzupassen, dass nicht jede InnoDB-Aktion direkt einen Schreibvorgang auf der Festplatte auslöst. Im Detail handelt es sich um eine Anpassungen der Option „innodb_flush_log_at_trx_commit“. Der MySQL-Dienst kann durch Veränderung dieser Option auch automatisch alle 1-3 Sekunden im Hintergrund eine Synchronisation ausführen. Hierdurch wird die Verlangsamung der InnoDB-Aktionen dann stark geschwächt. Da es hierbei aber mit einer sehr geringen Wahrscheinlichkeit zu einem Datenverlust von wenigen Sekunden kommen kann, ändern wir die Einstellung des Dienstes hier nur mit der expliziten Zustimmung unseres Kunden.
Ich habe dazu ein paar performance Tests vor der Umstellung der Option „innodb_flush_log_at_trx_commit“ und danach gemacht, hierzu habe ich ein Import Script verwendet, welches direkt auf die Datenbank zugreift und 42000 Datensätze anhand einer csv-Datei aktualisiert (update). Die Start- und Endzeiten wurden dabei protokoliert.
Vor der Umstellung der Option:
1 | 101:48 Minuten für das Update von 42000 Datensätzen. |
Nach der Umstellung der Option:
1 | 1:23 Minuten für das Update von 42000 Datensätzen. |
Das Ergebniss ist umglaublich, nahezug 99 mal schneller wurde der Datenimport durchgeführt. Also eine Einstellung, die ich nur empfehlen kann, wenn direkt auf die DB zugegriffen wird und es sich um InnoDB-Tabellen handelt. Bei Magentso direkt ist es leicht spürbar. Leider kann ich diesen Punkt schlecht Zeitlich prüfen, aber das Abspeichern eines Produktes dauert auch nach der Einstellung noch etwa 10 Sekunden und zuvor war es nicht viel länger.
Nun der Test nach einbau einer SSD-Platte für MySQL. Allgemein wirkt der Shop viel schneller, die SSD Platten erhöhen die Geschwindigkeit deutlich, auch wenn der Test nur ein paar Sekunden heraus kitzeln konnte:
Nach SSD Einbau:
1 | 1:05 Minuten für das Update von 42000 Datensätzen. |
Das Speichern eines Produktes ist etwa 3 mal schneller geworden. Von 10 Sekunden ist die Geschwindigkeit nun auf 3 Sekunden verkürzt wurden. Also lohnen sich auch die Zusatzkosten für eine SSD Platte.