Domainfactory Datenbank Prozesse bei InnoDB Tabellen beschleunigen (MySQL Zugriffe Langsam) + SSD Einbau / Test

Gepostet am Dezember 15, 2013

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.

3 Antworten bis “Domainfactory Datenbank Prozesse bei InnoDB Tabellen beschleunigen (MySQL Zugriffe Langsam) + SSD Einbau / Test”

  1. Tobi
    Jan 18, 2014
    Reply

    Auf welchen Wert war denn die Option innodb_flush_log_at_trx_commit bei domainfactory eingestellt? Also vorher und nachher?


    • Marcel
      Jan 18, 2014
      Reply

      Folgend die Konfigurationen, die vorherigen Einstellungen kenne ich nicht:

      Soeben haben wir das Binary-Commit für den MySQL5-Server Ihres
      ManagedServers „m07s3-1-10db“ deaktiviert. Zudem haben wir weitere
      Optimierungen innerhalb der MySQL-Konfiguration vorgenommen. Diese
      können Sie nachfolgend einsehen:

      query-cache-type = 1
      query_cache_size = 64M
      query_cache_limit = 2M

      tmp_table_size = 128M
      table_cache = 1024
      sort_buffer_size = 16M
      read_buffer_size = 6M
      read_rnd_buffer_size = 6M
      myisam_sort_buffer_size = 512M
      join_buffer_size = 16M

      innodb_buffer_pool_size = 1024M
      innodb_thread_concurrency = 8
      innodb_flush_log_at_trx_commit = 2


  2. Falls Du Besitzer eines Managed Servers bei Domainfactory bist, dann kannst Du DF auch anweisen die Barriers für die MySQL-Partition zu deaktivieren. Der Performancegewinn ist der Gleiche und Du bist weiterhin ACID Compliant.



Leave a Reply

 

Posts of Current Category



Facebook: