WordPress: Alle ausgeführten Queries debuggen
So einfach kann man alle pro Request ausgeführten Queries auslesen und den Ursprung debuggen.
Bei einem Kunden habe ich heute wirklich sehr viel Zeit damit verbracht herauszufinden, welche Queries bei einem Seitenrequest von WordPress ausgeführt werden und wo der Ursprung dieser Datenbank-Anfragen liegt.
Wir hatten es gemeinsam dabei mit zahlreichen Tricks probiert. Sowohl ein pre_get_filter als auch das komplette Mysql-Log sind leider nicht zielführend gewesen. Da mir das Problem keine Ruhe lies, habe ich mir einfach mal den WordPress Core angeschaut um herauszufinden, ob es da nicht einen undokumentierten Filter gibt und bin dabei auf etwas viel besseres gestoßen. WordPress kann nämlich selber alle Queries speichern.
Zunächst muss man dazu in der functions.php eine Kostante mit dem Namen SAVEQUERIES auf true setzen:
define('SAVEQUERIES', true);
Sobald das getan wurde, kann man über die globale wpdb-Instanz auf alle Queries zugreifen. Im Seitenfooter kann das ungefähr so ausssehen:
global $wpdb; print_r($wpdb->queries);
Dabei steht in dem Array sowohl die Ausführungszeit (!), also auch der Query und die Caller, also die Funktion, die den Query getriggert hat.
Diskussion
Hey tatsächlich. Ich hatte sogar Debug Objects installiert, aber finde vor Funktionen leider immer nicht das was ich suche. Vielleicht Solltest Du den Abschnitt Queries eher in DB-Queries oder MySQL-Queries umbenennen. Ich dachte da nämlich an WP_Query.
Leider geht bei uns auch die Frontend-Ausgabe nicht :)
Gute Idee, nehme ich mal auf. Ich bin da ja betriebsblind. Wenn du die aktuelle Version von GitHub nutzt, dann sind Queries für Core, Plugins , wp-content auch getrennt.
Alternativ kannst du via plugin Debug Objects alles aufbereitet auslesen, ohne Aufwand.