Leistung und Monitoring
Langsame LEFT-JOIN-Abfragen in WordPress diagnostizieren
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
- Reproduzieren Sie eine langsame URL und notieren Sie, ob eine Sitzung, Cache und Filter aktiv waren.
- Verwenden Sie PHP X-Ray, um die vollständige Abfrage und die erzeugende Komponente zu finden.
- Notieren Sie die Versionen von WordPress, MySQL oder MariaDB und der beteiligten Plugins.
- Prüfen Sie auf einer Kopie mit repräsentativen Daten den Plan mit
EXPLAINund 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
- Die Leistung der WordPress-Datenbank mit Index WP MySQL For Speed verbessern Bewerten Sie WordPress-Indizes mit Index WP MySQL For Speed, prüfen Sie die Änderungen vor dem Anwen...
- SQL-Abfragen zum Bereinigen verwaister Daten in der WordPress-Datenbank Bereinigen Sie verwaiste Daten, Revisionen und Transients in WordPress mit geprüften Abfragen, wiede...
- So laden Sie das reCAPTCHA-Skript mit Contact Form 7 nur dort, wo es nötig ist Bewerten Sie die Kosten von reCAPTCHA in Contact Form 7 und begrenzen Sie das Laden erst, nachdem Si...
- WP-Cron durch einen Cron-Job des Hostings ersetzen Richten Sie eine Systemaufgabe ein, die die WordPress-Ereignisse ausführt, prüfen Sie, dass sie funk...
Stimmt etwas nicht oder hat sich etwas geändert? Erzählen Sie es uns, und wir prüfen es.