Wenn ein Magento 2 Shop langsam reagiert, muss die Ursache nicht immer bei PHP, Redis oder Varnish liegen. Auch einzelne langsame Datenbankabfragen können dafür sorgen, dass bestimmte Seiten oder Prozesse deutlich länger brauchen als man erwarten würde.
Magento 2 bringt dafür bereits ein eigenes Query Log mit. Es lässt sich direkt über die CLI aktivieren:
|
1 |
bin/magento dev:query-log:enable |
Die protokollierten Datenbankabfragen landen anschließend in var/debug/db.log und können beispielsweise live verfolgt werden:
|
1 |
tail -f var/debug/db.log |
Interessanter wird die Ausgabe, wenn nicht jede kleine Abfrage protokolliert werden soll. Magento kann gezielt nur Queries erfassen, die länger als einen bestimmten Wert benötigen:
|
1 2 3 4 |
bin/magento dev:query-log:enable \ --include-all-queries=false \ --query-time-threshold=0.5 \ --include-call-stack=true |
Damit werden in diesem Beispiel nur Datenbankabfragen ab 0,5 Sekunden protokolliert. Durch include-call-stack wird zusätzlich der Aufrufpfad ausgegeben, wodurch sich häufig erkennen lässt, welches Modul oder welcher Code die Abfrage ausgelöst hat.
Gerade bei langsamen Produktseiten, Importen, Cronjobs oder individuellen Extensions lässt sich damit schnell herausfinden, ob eine einzelne Query zum Flaschenhals wird.
Nach der Analyse sollte das Query Log unbedingt wieder deaktiviert werden:
|
1 |
bin/magento dev:query-log:disable |
Besonders mit aktiviertem Call Stack kann die Logdatei sonst schnell anwachsen.