Heim >Datenbank >MySQL-Tutorial >So fragen Sie eine langsame SQL-Anweisung in MySQL ab
Methode: 1. Wenn die langsame Abfrage nicht aktiviert ist, verwenden Sie „set global slow_query_log='ON';“ um die langsame Abfrage zu aktivieren. 2. Verwenden Sie „set global slow_query_log_file=path“, um den Speicherort für die langsame Abfrage festzulegen. Verwenden Sie „subl path“. Fragen Sie einfach die Datei ab.
Die Betriebsumgebung dieses Tutorials: Centos 7-System, MySQL8.0.22-Version, Dell G3-Computer.
Suche nach langsamen SQL-Anweisungen in MySQL auf
Das langsame Abfrageprotokoll slow_query_log wird verwendet, um langsame SQL-Anweisungen aufzuzeichnen, die langsamer sind SQL kann optimiert werden.
Melden Sie sich bei der MySQL-Datenbank an:
1. Überprüfen Sie, ob die aktuelle langsame Abfrage aktiviert ist,
und die durch die langsame Abfrage angegebene Zeit
show variables like 'slow_query_log'; show variableslike 'long_query_time';Wenn nach Ihrer Abfrage das Ergebnis AUS ist, müssen Sie es über die entsprechenden Einstellungen auf EIN ändern:
set global slow_query_log='ON';Setzen Sie die langsame Abfrageverfolgungszeit auf 1 Sekunde: Nachdem Sie dies festgelegt haben , die Welt ist nicht Es wird sofort 1s und wird nach dem Neustart der Datenbank wirksam:
2 Legen Sie den Speicherort für die Protokolldatei für langsame Abfragen fest:
set global slow_query_log_file='/var/lib/mysql/test_1116.log';
3 konfigurierte Dateien:
sudo subl /var/lib/mysql/test_1116.log
Wissen erweitern:
SELECT * FROM `slow_log` where start_time > '2019/05/19 00:00:00';Auf diese Weise können Sie die langsamen Abfragen des Tages herausfinden. Überprüfen Sie den Status der aktuellen Abfrage.Jeder sollte üblicherweise Show Processlist verwenden, um die aktuell im System ausgeführten Abfragen zu überprüfen. Tatsächlich werden diese Daten auch in der Processlist-Tabelle in der Information_schema-Bibliothek gespeichert, wenn Sie möchten Führen Sie eine bedingte Abfrage durch und fragen Sie diese direkt ab. Es ist bequemer, eine Tabelle zu erstellen. Zum Beispiel alle aktuellen Prozesse anzeigen
select * from information_schema.processlistSehen Sie sich die aktuell laufenden Abfragen an und sortieren Sie sie in umgekehrter Reihenfolge nach der Ausführungszeit
select * from information_schema.processlist where info is not null order by time descEine normalerweise laufende Datenbank, da eine Abfrage sehr schnell ausgeführt wird, und die von uns erfassten Informationen ist nicht Die Anzahl der Nullabfragen wird sehr gering sein. Eine Bibliothek mit einer hohen Auslastung wie unserer kann in der Regel nur wenige Medien finden. Wenn Dutzende Abfragen mit nicht leeren Informationen gleichzeitig gefunden werden, kann ebenfalls davon ausgegangen werden, dass ein Problem mit dem System vorliegt. Systemprobleme und PositionierungNachdem wir bemerkten, dass das System langsamer wurde, überprüften wir es sofort mithilfe langsamer Abfragen und überprüften die Prozessliste. Wir stellten fest, dass die Anzahl langsamer Abfragen pro Minute auf über 1.000 anstieg, und zwar eine große Anzahl Während der Ausführung häuften sich Abfragen. Da die oberste Priorität darin besteht, den normalen Betrieb des Systems so schnell wie möglich wiederherzustellen, besteht die direkteste Möglichkeit, dies zu beeinflussen, darin, zu überprüfen, wie viele Abfragen in den Abfrageergebnissen der Prozessliste sich im Sperrzustand befinden oder für eine Weile ausgeführt wurden lange Zeit und beenden Sie diese Prozesse mit dem Befehl kill. Durch das kontinuierliche Beenden dieser Prozesse, die zu einer Überlastung des Systems führen können, kann das System schließlich vorübergehend in den Normalzustand zurückversetzt werden. Dies ist natürlich nur eine Notlösung. Darüber hinaus ist es natürlich am wichtigsten zu analysieren, welche Abfragen zu Systemüberlastungen führen. Zur Analyse verwenden wir immer noch langsame Abfragen. Es gibt mehrere wichtige Indikatoren in den Abfrageergebnissen der langsamen Abfragetabelle: start_time Startzeit Dieser Parameter sollte verwendet werden, um die Zeit des Systemproblems abzugleichen, um herauszufinden, welche Abfrage der Schuldige ist. query_time Abfragezeit
rows_sent und rows_examined sind die Anzahl der gesendeten Ergebnisse und die Anzahl der von der Abfrage gescannten Zeilen. Diese beiden Werte sind besonders wichtig, insbesondere rows_examined. Im Grunde sagt es uns, welche Abfrage die „große“ Abfrage ist, auf die wir achten müssen.
Im tatsächlichen Betrieb analysieren wir auch die Abfragen mit einer großen Anzahl von Zeilen nacheinander, fügen Indizes hinzu und ändern das Schreiben von Abfrageanweisungen, um das Problem vollständig zu lösen.
Verarbeitungsergebnisse und Reflexion
Nach der Überprüfung und Korrektur aller langsamen Abfragen liegt die aktuelle Anzahl langsamer MySQL-Abfragen pro Minute zwischen 1 und 2, und die CPU-Auslastung ist ebenfalls sehr gering. Das Problem ist grundsätzlich gelöst.
Denken Sie über die Gründe für das Problem nach, es gibt ein paar Dinge, auf die Sie achten sollten:
1. Datenbankprobleme verursachen oft keine Probleme, wenn sie online gehen, aber es kommt zu einem Anhäufungsprozess von fehlerhaften Abfrageanweisungen Die Systemlast wird sich allmählich erhöhen, der letzte Tropfen, der das Fass zum Überlaufen bringt, scheint oft unerklärlich zu sein , die Datenmenge nimmt zu Die Überwachung langsamer Abfragen muss ebenfalls im Zabbix-Überwachungsumfang enthalten sein.
Empfohlenes Lernen:
MySQL-Video-TutorialDas obige ist der detaillierte Inhalt vonSo fragen Sie eine langsame SQL-Anweisung in MySQL ab. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!