Leistung und Monitoring

Langsame LEFT-JOIN-Abfragen in WordPress diagnostizieren

Geprüft am 3 Min. Lesezeit WordPress Performance Datenbank

In großen Installationen kann eine WordPress-Abfrage, die nach Kategorien oder Taxonomien filtert, sehr lange dauern, wenn sie posts und term_relationships verknüpft, Ergebnisse sortiert und begrenzt. Ein LEFT JOIN allein beweist nicht, dass die Abfrage schlecht ist: Es kommt auf Daten, Filter, Indizes und Ausführungsplan an.

Hintergrund des historischen Falls

Diese Anleitung entstand aus Störungen mit Hunderttausenden Beiträgen und verweist auf das WordPress-Ticket 54346, in dem Kategorieabfragen und Alternativen mit Unterabfragen untersucht werden.

Die in bestimmten Installationen beobachteten Ergebnisse garantieren keine Zeiten im Millisekundenbereich für jede Datenmenge. Sie machen einen Patch aus dem Ticket auch nicht zu einer offiziellen Korrektur für alle Versionen.

Die tatsächliche Abfrage bestimmen

  1. Reproduzieren Sie eine langsame URL und notieren Sie, ob eine Sitzung, Cache und Filter aktiv waren.
  2. Verwenden Sie PHP X-Ray, um die vollständige Abfrage und die erzeugende Komponente zu finden.
  3. Notieren Sie die Versionen von WordPress, MySQL oder MariaDB und der beteiligten Plugins.
  4. Prüfen Sie auf einer Kopie mit repräsentativen Daten den Plan mit EXPLAIN und die vorhandenen Indizes.

Vergleichen Sie, wie viele Zeilen untersucht werden, wo gefiltert und wie sortiert wird. Ein anderer Plan nach einem Update verdient eine Analyse, benennt aber nicht automatisch einen einzigen Schuldigen.

Eine Alternative bewerten

Der Entwickler kann eine Unterabfrage, einen gleichwertigen Ausdruck, einen Index oder eine andere Verwendung von WP_Query testen. Prüfen Sie, dass dieselben Beiträge, Sortierung, Ausschlüsse, Duplikate und Paginierung erhalten bleiben, besonders bei Kombinationen von Taxonomien.

Ersetzen Sie nicht alle JOINs und entfernen Sie GROUP BY nicht global. Eine Änderung, die eine Kategorie beschleunigt, kann in einer anderen Abfrage falsche Ergebnisse liefern.

Anwenden und pflegen

Bearbeiten Sie die Dateien des Kerns nicht direkt: Updates überschreiben die Änderungen, und ein alter Patch passt womöglich nicht mehr. Wenn eine vorübergehende Anpassung unumgänglich ist, muss der Entwickler sie mit Versionskontrolle, Tests und einem Weg zum Entfernen pflegen.

Vergleichen Sie nach der Änderung mehrere Ausführungen und prüfen Sie Kategorien, Suchen, Paginierung und Backend. Bewahren Sie den vorherigen Plan auf und machen Sie die Änderung rückgängig, wenn sich andere Vorgänge verschlechtern. Für Abfragen, die auch Gesamtzahlen berechnen, lesen Sie die Anleitung zu SQL_CALC_FOUND_ROWS.

Das könnte Ihnen auch helfen

Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.