Magento Datenbank Optimierung – Teil 2

Nachdem wir in der letzten Woche (Magento Datenbank Optimierung – Teil 1) die Grundlagen für einen schnellen Magento-Shop geschaffen haben zeigen wir Euch heute weitere Möglichkeiten der Optimierung.

In einem aktuellen Projekt (ca. 50.000 Besuchern, 700.000 Seitenaufrufen und knapp 1000 Checkouts pro Tag) konnten wir durch Deaktivierung der Log-Funktionen 1 – 1,5 CPU-Kerne auf dem Datenbankserver einsparen. 

Die Änderungen aus Teil 1 sorgen für eine aufgeräumte Datenbank, allerdings loggt Magento nach wie vor jeden Zugriff in den entsprechenden Tabellen und löscht diese nach einigen Tagen wieder. Beide Vorgänge verbrauchen CPU-Ressourcen die wir sinnvoller einsetzen können, daher deaktivieren wir die Log-Funktionen heute komplett.

Deaktivierung über das Backend – Lösung mit Hindernis

Magento bietet Out-of-the-Box einige Möglichkeiten die Log-Funktionen zu deaktivieren. Am einfachsten ist es das Magento Backend zu benutzen:

System -> Konfiguration -> Erweitert -> Modulausgaben

Hier setzt Ihr Mage_Log auf Deaktivieren.

Die Deaktivierung über das Backend hat einen entscheidenden Nachteil: Es werden alle internen Log-Funktionen deaktiviert, somit funktionieren die Entwickler- und Extension-Logs auch nicht mehr.

MySQL Storage Engine BLACKHOLE – Das schwarze Datenloch!

Technisch etwas anspruchsvoller aber eleganter ist die Änderung der MySQL Storage Engine der Log-Tabellen auf BLACKHOLE. BLACKHOLE ist wie der Name schon sagt ein schwarzes Loch, allerdings nur in digitaler Form und wird daher “nur” Euren Daten gefährlich.

ALTER TABLE log_url ENGINE = BLACKHOLE;
ALTER TABLE log_url_info ENGINE = BLACKHOLE;
ALTER TABLE log_visitor ENGINE = BLACKHOLE;
ALTER TABLE log_visitor_info ENGINE = BLACKHOLE;

Das oben gezeigte Query müsst Ihr direkt auf der MySQL-CLI oder mit Hilfe von phpMyAdmin über den Reiter “SQL” abfeuern. – Achtet unbedingt auf die richtige Datenbank Auswahl und die korrekten Tabellennamen im SQL-Query!!!

Sobald das SQL-Query ausgeführt wurde sind die Log-Tabellen leer und sämtliche neu zu schreibende Log-Daten werden sofort verworfen.

Die BLACKHOLE-Lösung hat einen entscheidenden Vorteil gegenüber der Backend-Lösung da aus Magento-Sicht nach wie vor alle Log-Funktionen aktiv sind. Die Entwickler- und Extension-Logs könnt Ihr nutzen, an die Log-Tabellen gesendete Daten werden allerdings nicht verarbeitet und verschwinden direkt in unserem schwarzen Loch. Ganz ohne die CPU oder unsere Speichermedien zu belasten! 😀

In der nächsten Folge (Magento Datenbank Optimierung – Teil 3) zeigen wir Euch zwei kleine aber sehr wirkungsvolle SQL-Querys zur Optimierung der Magento Datenbank.


Magento Datenbank Optimierung – Teil 1

Immer wieder werden wir, in Beratungsgesprächen zu unserem Magento Hosting und der täglichen Arbeit im Support, nach der optimalen Konfiguration eines Magento-Shops gefragt.

Unser Wissen möchten wir gerne weitergeben, deshalb findet Ihr ab heute in der Kategorieliste rechts den Punkt Performance. In unregelmäßigen Abständen werden wir hier kurze Beiträge mit leistungssteigernden Maßnahmen vorstellen.

Starten werden wir heute mit einem der häufigsten Gründe für einen langsamen Magento-Shop und Backup-Probleme, die immer größer werdenden Log-Tabellen.

Nach der Installation loggt Magento jeden Zugriff auf eine beliebige Seite in der Datenbank. Die Daten können später dazu genutzt werden Statistiken oder andere Auswertungen zu erstellen, in der Regel werden diese Daten allerdings nie benötigt da externe Dienste wie Google Analytics zum Einsatz kommen.

Der Cronjob – ohne ihn geht nichts

Grundlegend für die fehlerfreie Funktion von Magento ist die Einrichtung des Cronjobs. Die Aufgabe eines Cronjobs ist es in regelmäßigen Abständen bestimmte Aufgaben zu erledigen, welche das im Detail sind könnt Ihr im Magento Wiki nachsehen. Neben den Standardaufgaben wie Newsletterversand, Index- und Sitemaperstellung führt das Script auch diverse Wartungsarbeiten aus. Wie Ihr einen Cronjob einrichtet erfahrt Ihr im Kundencenter.

Auf die richtigen Einstellungen kommt es an!

Nachdem der Cronjob eingerichtet wurde müssen wir noch einige Einstellungen im Magento Backend vornehmen. Das Menü zur Konfiguration der Log-Bereinigung findet Ihr unter:

System > Konfiguration > Erweitert > System > Log Bereinigung

Da der Vorgang je nach Datenmenge sehr viele Ressourcen beanspruchen kann sollte die Bereinigung in der Nacht erfolgen. Die Anzahl der Tage kann beliebig konfiguriert werden. – Je kürzer desto besser! 🙂

Magento Log Bereinigung

Einstellungen der Log-Bereinigung in Magento

Sobald der Cronjob eingerichtet und die Einstellungen vorgenommen wurden ist alles korrekt konfiguriert, in der folgenden Nacht startet der Job pünktlich seine Arbeit und räumt Eure Magento Datenbank gründlich auf.

In der nächsten Folge (Magento Datenbank Optimierung – Teil 2) erklären wir die komplette Deaktivierung der Log-Funktion und zeigen euch wie ihr die Datenbank weiter aufräumen könnt.