Magento – Alle Datenbankabfragen loggen

Spätestens wenn man anfängt mit Magento zu arbeiten, sollte man sich intensiv mit einem Debugger, z.B. Zend Debugger oder XDebug befassen.
Mit dem guten alten Debugging per DIE('hier kommt meißtens eine total lustige Debug Nachricht...') oder der Ausgabe von Debug Infos in Logfiles wird man bei Magento auf lange Sicht keine große Freude haben.

Allerdings ist es manchmal auch nützlich, wenn man bestimmte Infos im Hintergrund in eine Logdatei schreibt, z.B. wenn man wissen möchte, wie viele und vor allem welche Datenbankabfragen Magento auf einer bestimmten Seite macht. Da wird sich der ein oder andere sicher wundern, es können nämlich schon mal schnell über hundert Datenbankabfragen pro Seite sein. Da hilft einem ein Debugger oder der Magento Profiler nur bedingt weiter.

Es gibt aber eine einfache Methode, um alle Queries mitzuschreiben, da Magento die Möglichkeit bereits integriert hat.
Man muss einfach nur in der Datei lib\Varien\Db\Adapter\Pdo\Mysql.php folgende Anpassungen machen.
1. Debug Modus einstellen

1
protected $_debug               = true;

2. Einstellen, dass wirklich alles Quries geloggt werden sollen

1
protected $_logAllQueries       = true;

Würde man den zweiten Wert nicht auf true stellen, so würden nur die Queries geloggt, die eine bestimmte Ausfürungszeit überschreiten.
Die minimale Ausführungszeit für das Logging ist dabei in folgender Variable gespeichert:

1
protected $_logQueryTime        = 0.05;

Sind diese Einstellungen gemacht, so werden alle Datenbankabfragen in die Datei geschrieben, die in folgender Variable definiert ist:

1
protected $_debugFile           = 'var/debug/pdo_mysql.log';

Standardmäßig wird die Datei also in diesem Verzeichnis unterhalb des Magento Root Pfads angelegt, man kann natürlich auch einen eigenen Pfad definieren.

Sind die Einstellungen entsprechend gemacht, so werden dann alle Datenbankabfragen in folgenden Format in der angegeben Datei gespeichert:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
## 2012-10-18 12:01:29
## 14485 ## QUERY
SQL: INSERT INTO `log_visitor` (`session_id`, `first_visit_at`, `last_visit_at`, `last_url_id`, `store_id`) VALUES (?, ?, ?, ?, ?)
BIND: array (
  0 => 'ncqvbv4ibmtom536p9p6egbv75',
  1 => '2012-10-18 12:01:29',
  2 => '2012-10-18 12:01:29',
  3 => 0,
  4 => '1',
)
AFF: 1
TIME: 0.0007
 
## 2012-10-18 12:01:29
## 14485 ## QUERY
SQL: DESCRIBE `log_visitor_info`
AFF: 7
TIME: 0.0068

Das heißt man sieht genau, wann die Abfrage ausgeführt, wie lange sie gedauert hat und natürlich den eigentlichen SQL Befehl inklusive der jeweiligen Paramter.

ACHTUNG: Auf dem Live System sollte man das Debugging natürlich nicht längere Zeit angeschaltet lassen, da die Datei mitunter recht schnell sehr groß wird, ja nachdem wie viel Traffic man auf der Seite hat.

Dieser Beitrag wurde unter Magento abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Die Kommentarfunktion ist geschlossen.