Nützliche Tricks zum Finden und Beheben langsamer WordPress-Datenbankabfragen
Veröffentlicht: 2019-04-17Moderate SQL-Anfragen können die Ausführung der WordPress-Anwendungsentwicklungsseite beeinträchtigen. Gelegentlich sind moderate Abfragen eine Folge von unzureichend strukturiertem SQL, das so niemals hätte durchgeführt werden dürfen.
Darüber hinaus waren moderate Anfragen in einigen Fällen an einem bestimmten Punkt in Wirklichkeit schnelle Fragen – doch als die Website erfahrener wurde, wurde die Anfrage langsamer und langsamer, machtlos, um die wachsende Datenbank im Auge zu behalten.
Ungeachtet dessen, wie das SQL moderat wurde, sollte man einige Ansätze untersuchen, um Probleme in der WordPress-Anwendungsentwicklung zu entdecken und zu beheben. Hier und da benötigt man möglicherweise bestimmte Webanwendungen und hat möglicherweise nicht genügend Energie, Fähigkeiten oder Ausgabenplan, um benutzerdefinierte Verbesserungen vorzunehmen. Das Erstellen ohne jegliche Vorbereitung kann die Antwort auf einige Probleme sein, aber es kann länger dauern, als von einer aktuellen Codebasis aus zu beginnen. WordPress wurde ursprünglich als Blogging-Plattform konzipiert und ist dafür immer noch hervorragend. Wie dem auch sei, es hat sich zu einem vollwertigen Content-Management-System (CMS) entwickelt und kann für einige Zwecke sogar eine starke Webanwendung erstellen – schnell und zu einem wesentlich geringeren Kostenplan als eine benutzerdefinierte Verbesserung. Während WordPress integrierte Entwicklungsanwendungen bietet, kann es für Webanwendungen verwendet werden, um es besonders nützlich zu machen. Die inhärenten Seiten- und Beitragsstrukturen können für viele Dinge verwendet werden, aber für den Fall, dass benutzerdefinierte Informationen und Felder aufgenommen, gesucht oder abgefragt, kontrolliert und angezeigt werden müssen, ist etwas zusätzliche Arbeit erforderlich.
Langsame Abfragen finden
Die Suche nach dem Ursprung moderater Fragen umfasst zwei Phasen:
- Herausfinden, welche Fragen wirklich die moderaten sind.
- Identifizieren des Programms, das sie bedient.
Man sollte einen Blick auf zwei Module und ein SaaS werfen, die es ihnen ermöglichen können, moderate Anfragen zu entdecken.
Abfragemonitor
Um Informationen über die gerade betriebene Seite zu erhalten, kann dieses Modul verwendet werden. Trotz einer ganzen Reihe von Daten über die Insider-Aktivitäten von WordPress gibt es eine Punkt-für-Punkt-Aufschlüsselung von:
- Wie viele Fragen sind bei dieser Nachfrage aufgetreten?
- Welche Anfrage auf der Seite hat am längsten gedauert?
- Welche Kapazitäten haben am meisten Energie in SQL-Fragen investiert?
- Egal, ob diese Anfragen aus Modulen, Fächern oder dem WordPress-Center stammen
Der Abfragebildschirm erkennt sogar moderate Fragen mit irritierendem rotem Inhalt, was die Auswahl des Problems SQL sehr einfach macht.
Debug-Leiste
Ein weiteres phänomenales Instrument, um frostig moderates SQL zu finden, ist das alte, bewährte Modul Debug Bar. Die Debug-Leiste liefert Daten über die innere Funktionsweise von WordPress, wenn eine Seite geladen wird, mit Dingen wie:
- Parameter von WP_Query
- Daten anfordern (Zählung Überarbeitungsregeln koordinieren)
- SQL-Anfragen, die von der vorliegenden Seite erzeugt werden
Um das SQL-Following in der Debug-Leiste zu aktivieren, sollte der Benutzer Wert darauf legen, SAVEQUERIES irgendwo auf der Website zuzulassen – wahrscheinlich in wp-config.php
Achtung: SAVEQUERIES beeinflusst die Ausführung auf der Site und sollte vermutlich nicht auf einem Generierungsserver verwendet werden. Es kann jedoch auf einer Weiterentwicklungsmaschine verwendet werden.
Das Finden des moderaten SQL ist mit Debug Bar nicht sehr einfach. Zum Beispiel gibt es keine sortierbaren Tabellen oder bietet moderate Abfragen für den Benutzer. Was die Debug-Leiste bietet, ist eine Kapazitätsverfolgung, die den Benutzer genau in die Richtung des Ursprungs einer Frage führt.
Dies ist ein Überblick über die geladenen Dokumente und die Kapazitäten, die sich aus der Ausführung der Anfrage ergeben. Meistens ist man scharf auf den Abschnitt zum absoluten Weitermachen im Rundown; Dies ist der Ort, an dem die gemäßigte Frage ausgeführt wurde und wo man seine Jagd beginnen sollte. Das Praktische daran, die Einstellung jeder Kapazität zu haben, die diese Frage aufwirft, ist, dass sie Aufschluss darüber geben kann, warum die SQL in jedem Fall ausgeführt wurde.
NewRelic
NewRelic ist eine Verwaltung, die die Ausführung der Entwicklung von Webanwendungen, einschließlich der Entwicklung von WordPress-Anwendungen, misst und überwacht. Die Verwaltung liefert eine Unmenge an Daten über die Ausführung der Website. Es ist alles andere als schwierig, die Orientierung in den Informationen zu verlieren, die NewRelic dem Benutzer bei SQL-Anfragen im Minutentakt liefert.
Es gibt zwei bemerkenswerte Unterschiede zwischen NewRelic und den Modulen, auf die wir zuvor verwiesen haben:
- NewRelic gibt viel mehr Einblick in die Ausführung des PHP, bis hin zur genauen Berechnung der für jede Funktion aufgewendeten Zeit
- NewRelic verfolgt jede Anforderung an die Site außer Sichtweite, sodass man später darauf verweisen kann, um moderates SQL zu entdecken. Die Module geben ihm nur die aktuelle Seite.
Es ist wichtig, dass NewRelic eine kostenlose Plattform hat, die allgemeine Informationen über die Ausführung der Website gibt, aber dass man für den ausgefallenen Kleinkram auf eine kostenpflichtige Version umsteigen muss, um einzelne Anforderungen zu überprüfen und moderate Anfragen zu finden.
Verstehen einer langsamen Abfrage mit EXPLAIN
Bis zu diesem Zeitpunkt waren die Geräte für die Suche nach moderaten Fragen gesichert. Gegenwärtig sollte bekannt sein, warum diese Anfragen die Dinge behindern.
Das MySQL-Schlagwort EXPLAIN kann es ermöglichen, äh, zu klären, was vor sich geht. Das Hinzufügen von EXPLAIN am Anfang einer Anfrage zeigt an, wie MySQL eine Frage ausführt. Bei komplizierten Abfragen kann EXPLAIN dabei helfen, moderate Schwerpunkte in den SQLs zu unterscheiden, beispielsweise moderate Unterabfragen oder verschwenderische Aktivitäten.
Beheben langsamer Abfragen
Da festgestellt wurde, dass die Abfragen moderat sind, und EXPLAIN dem Benutzer mitgeteilt hat, warum dies der Fall ist, sollten Sie einen Blick auf einige Möglichkeiten werfen, um diese schläfrigen Probleme zu beheben.
Option 1: Die Frage verdrehen
Es könnte eine Frage geben, die den Bildschirm von Beitrag bearbeiten auf eine sehr langsame Geschwindigkeit bringt. Die Anfrage war ein Teil der Metabox der benutzerdefinierten Felder.
Das definitive Stück SQL bringt eine meta_keys-Liste aus der Tabelle ks29so_postmeta, die aller Wahrscheinlichkeit nach nicht mit dem Unterstrich beginnt. Die GROUP BY-Erklärung impliziert, dass jedes Ergebnis etwas Besonderes ist.
Wenn Sie diese Anfrage mehrmals ausführen, ist hier die Zeit, in der sie dauern kann:
1,7145 Sek
1,7911 Sek
1,8076 Sek
1,7707 Sek
1,8456 Sek
Man könnte eine Abfrage entwickeln, die zu ähnlichen Ausgaben führt. Es muss als einzigartiger meta_key ausgewählt werden. Außergewöhnlich ist ein äquivalentes Wort für besonders, was zufällig eine SQL-Erklärung ist!
Option 2: Hinzufügen eines Index
Während der Benutzer eine SQL-Frage für eine festgelegte MySQL-Tabelle ausführt, muss er die gesamte Tabelle untersuchen, um herauszufinden, welche Zeilen für die jeweilige Abfrage von Bedeutung sind. An dem Punkt, an dem der Tisch riesig wird, dauert diese Überprüfung eine ganze Weile.
An dieser Stelle kommen MySQL-Datensätze ins Spiel. Listen nehmen die Informationen in einer Tabelle auf und ordnen sie so an, dass Informationen viel einfacher zu finden sind. Indem die Informationen auf eine bestimmte Weise sortiert werden, tragen Dateien dazu bei, das Filtern zu verringern, das MySQL für jede Anfrage durchführt.
Dateien können zu einzelnen Segmenten oder über mehrere Abschnitte hinweg hinzugefügt werden.
Mit einer Datei auf meta_key ähnelt die allererste SQL-Fragezeit etwas dieser:
0,0041 Sek
0,0023 Sek
0,0030 Sek
0,0025 Sek
0,0019 Sek
Das ist extrem schlau.
Ein Alarmausdruck für Dateien: Jedes Mal, wenn INSERT eine Spalte erstellt oder UPDATE für eine Tabelle verwendet wird, wird die Liste neu bestimmt, was eine kostspielige Aktivität sein kann. Aufzeichnungen machen das Durchlesen der Tabelle schneller, aber das Schreiben in sie ist langsamer. Obwohl eine richtig platzierte Indexliste sehr gut funktionieren kann, sollte man nicht davon besessen sein, ohne die allgemeinen Auswirkungen der Liste auf die Datenbank zu überprüfen.
Option 3: Zwischenspeichern der Abfrageergebnisse
Sobald klar ist, dass es sich um eine moderate Frage handelt. Anstatt die Frage zu ändern, kann es ein Szenario geben, in dem es nur die Nachwirkungen der Untersuchung beseitigt. Auf diese Weise würde man die Regelmäßigkeit der Ermittlungen einschränken und in den meisten Fällen einen „Freifahrtschein“ erhalten.
Die WordPress Transients API ist eine der Möglichkeiten, die Abfragen zu reservieren. Transienten werden verwendet, um die Folgen kostspieliger Aufgaben aufzuheben, z. B.
- Anfragen an externe Websites (z. B. Abrufen laufender Facebook-Posts)
- Langsame Handhabung (z. B. Suche nach riesigen Saiten mit einer üblichen Artikulation)
- Langsame Datenbankabfragen!
Auswahl eines Ansatzes
Es gibt eine Reihe von Alternativen, die dargelegt wurden, und höchstwahrscheinlich gibt es siebzehn verschiedene Ansätze, um diese moderate Untersuchung zu verstehen. Welche Vorgehensweise sollte man wählen?
Wahl 1 (Änderung der Frage) lieferte brillante Ergebnisse. Es sollte jedoch die Möglichkeit in Betracht gezogen werden, dass die modifizierte Untersuchung im Allgemeinen nicht zu ähnlichen Ergebnissen führt. Man könnte den Code unwissentlich mit einer etwas abwegigen Frage borken.
Alternative 2 (einschließlich eines Datensatzes) ist nicht immer denkbar, abhängig von der Tabelle und den Abschnitten, die von der Anfrage verwendet werden. Aufgrund der Tabellen des WordPress-Anwendungsentwicklungszentrums müsste man über die anderen Auswirkungen der Aufzeichnungen betonen:
- Erwartet die zentrale Aktualisierungsroutine zusätzliche Listen?
- Wird das Einfügen einer Datei verschiedene Abfragen moderieren, ähnlich wie bei INSERT und UPDATE?
Alternative 3 (Reservierung der Ergebnisse über Obdachlose) hat keine nennenswerten Auswirkungen – der Benutzer muss die erste Anfrage nicht ändern und es besteht keine Notwendigkeit, die Datenbankstruktur anzupassen.
Normalerweise entscheiden sich die Leute für Option 3. In einem bestimmten Fall kann er eine andere Alternative wählen, abhängig von der Frage, die er löst, oder der bestimmten Site, die SQL-Probleme hat. Es gibt sicherlich keine allgemeingültige Antwort auf die meisten Ausführungsprobleme, also ist es erlaubt, sich von der Entscheidung des anderen zu unterscheiden – oder jede der drei ohne einen Augenblick zu zögern auszuprobieren!
Auf dem Laufenden bleiben
Es hat hier ein echtes Problem skizziert. Die Custom Fields-Box auf CSS-Tricks war wirklich ein Übeltäter für einige äußerst moderate Datenbankabfragen. Es hat auch verschiedene Wege zu möglichen Arrangements skizziert.
Konzeption von brandneuen Ideen
Es gibt verschiedene Methoden, die man anwenden kann, um die Ausführung von Fragen zu beschleunigen und zu versuchen, die mehr Arbeit erfordern, als nur die Anfrage zu optimieren oder eine Liste hinzuzufügen. Einer der langsamsten Teile der Frage ist die Arbeit, die geleistet wird, um die Tabellen zu verbinden, um von der Client-ID zur Artikel-ID zu gelangen, und man muss dies für jeden Client tun.
Man könnte die Informationen denormalisieren, indem man eine Tabelle erstellt, in der die Genehmigungsinformationen zusammen mit der Client-ID und der Artikel-ID für alle Lizenzen gespeichert sind, und diese einfach für einen bestimmten Client abfragt. Man müsste die Tabelle mithilfe von MySQL-Triggern auf INSERT/UPDATE/DELETE in die Lizenztabelle ändern (oder andere, die sich darauf verlassen, wie sich die Informationen ändern könnten), dies würde jedoch die Ausführung der Abfrage dieser Informationen erheblich verbessern.
Wenn also verschiedene Joins die Frage in MySQL moderieren, kann es schneller sein, die Anfrage in mindestens zwei Artikulationen aufzuteilen und sie unabhängig voneinander in PHP auszuführen und anschließend die Ergebnisse im Code zu sammeln und zu kanalisieren.