Wie findet man Verknüpfungen, die ohne Indizes durchgeführt wurden?

Wie findet man Verknüpfungen, die ohne Indizes durchgeführt wurden?

Ich betreibe eine WordPress-Website auf Mariadb 10.6 und habe kürzlich einen Fehler beim Ausführen von Joins ohne Indizes in Mysqltuner festgestellt.

Obwohl die Zahl nicht sehr groß ist, empfiehlt Mysqltuner, die Key_buffer_size weiter zu erhöhen.

Da mein VPS jedoch nicht viel freien Speicher hat, löse ich diesen Fehler mit einem anderen Problem.

Da ich Dutzende von Plugins aktiv habe, möchte ich prüfen, welches tolle Plugin das Problem verursacht.

Also habe ich zunächst das Fehlerprotokoll wie folgt aktiviert.

log-queries-not-using-indexes = 1
log_error = /var/log/mysql/mysql-error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 3

Und nach einer bestimmten Zeit habe ich pt-query-digest ausgeführt, um das Fehlerprotokoll zu analysieren.

pt-query-digest /var/log/mysql/mysql-slow.log

Ich kann mir aber keine weiteren Probleme vorstellen.

Wie können Sie unter den vielen Abfragen im langsamen Protokoll feststellen, welche versucht, eine Verbindung mit einer Spalte ohne Index herzustellen?

Da ich die Datenbank nicht kenne, kann ich es allein durch Betrachten der Abfrage nicht herausfinden.

Antwort1

Um nur Verknüpfungen zu finden, die ohne Indizes durchgeführt wurden,

Ermitteln Sie in der MySQL-Eingabeaufforderung die aktuellen Werte, sodass Sie nach einer Stunde der Aufzeichnung NUR von JPWI in Ihrem langsamen Abfrageprotokoll zum Normalzustand zurückkehren können.

SELECT @@long_query_time;
SELECT @@min_examined_row_limit;
      write down the above values
  
SET GLOBAL long_query_time=3600;  for a ONE MINUTE slow log trigger
SET GLOBAL min_examined_row_limit=1;   if the query reads one row, consider logging
SET GLOBAL log_queries_not_using_indexes=1;  to get the log you are needing

IN EINER STUNDE,

SET GLOBAL long_query_time=discovered above;
SET GLOBAL min_examined_row_limit=discovered above; 
SET GLOBAL log_queries_not_using_indexes=0;   # to turn OFF feature

FLUSH LOGS;

Überprüfen Sie Ihr Slow Query Log der letzten Stunde auf die beteiligten Abfragen ohne Index.

Sehen Sie sich die Kontaktinformationen im Profil an und nehmen Sie Kontakt mit uns auf, wenn Sie weitere Beratung benötigen.

Die meisten Leute zeichnen langsame Abfragen und Abfragen ohne Indexe NICHT auf, um die Spaghetti nicht zu trennen. SIE ERHALTEN DAS EINE oder DAS ANDERE, nur um eine gewisse Form von Vernunft zu bewahren.

(Formatierung korrigiert, Bearbeitung benötigt 6 Zeichen)

Antwort2

Haben Sie MyISAM-Tabellen? Wenn nicht (und Ihre Tabellensollensei InnoDB),untere key_buffer_sizebis 30M.

"Joins ohne Indizes" sind nicht unbedingt ein Problem. Wenn SielangsamAbfragen, das ist wichtiger. Siehe dieSlowLog. Das heißt, die Arbeit an der Verbesserung deram langsamsten, unabhängig davon, ob es sich um „Joins ohne Index“ handelt oder nicht. Verwenden Sie pt-query-digestodermysqldumpslow -s t

Für eine bessere WordPress-Leistung fügen Sie dieses Plugin hinzu: WP Index Verbesserungen

verwandte Informationen