Problembehandlung bei MySQL-Abfragen

Note

Manchmal stoßen Benutzer auf Probleme, wenn sie beginnen, Abfragen zu ihren Daten durchzuführen. In einigen Datenbanksystemen, einschließlich MySQL, müssen Abfrageanweisungen in mit einem Semikolon (;) enden, damit die Abfrage abgeschlossen werden kann, wie im folgenden Beispiel:

SHOW * FROM table_name;

Wenn Sie am Ende Ihrer Abfrage kein Semikolon einfügen, wird die Eingabeaufforderung in einer neuen Zeile fortgesetzt, bis Sie die Abfrage abgeschlossen haben, indem Sie ein Semikolon eingeben undENTER drücken.

Einige Benutzer stellen möglicherweise fest, dass ihre Abfragen äußerst langsam sind. Eine Möglichkeit, herauszufinden, welche Abfrageanweisung die Ursache für eine Verlangsamung ist, besteht darin, das langsame Abfrageprotokoll von MySQL zu aktivieren und anzuzeigen. Öffnen Sie dazu die Dateimysqld.cnf, mit der Sie Optionen für den MySQL-Server konfigurieren. Diese Datei wird normalerweise im Verzeichnis/etc/mysql/mysql.conf.d/gespeichert:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Blättern Sie durch die Datei, bis Sie die folgenden Zeilen sehen:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
#slow_query_log         = 1
#slow_query_log_file    = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
. . .

Diese auskommentierten Anweisungen bieten MySQLs Standardkonfigurationsoptionen für das langsame Abfrageprotokoll. Im Einzelnen führen die folgenden Aktionen aus:

  • slow-query-log: Wenn Sie diesen Wert auf1 setzen, wird das langsame Abfrageprotokoll aktiviert.

  • slow-query-log-file: Dies definiert die Datei, in der MySQL langsame Abfragen protokolliert. In diesem Fall zeigt es auf die Datei/var/log/mysql-slow.log.

  • long_query_time: Durch Setzen dieser Anweisung auf2 wird MySQL so konfiguriert, dass alle Abfragen protokolliert werden, deren Abschluss länger als 2 Sekunden dauert.

  • log_queries_not_using_indexes: Hiermit wird MySQL angewiesen, auch alle Abfragen, die ohne Indizes ausgeführt werden, in der Datei/var/log/mysql-slow.log zu protokollieren. Diese Einstellung ist nicht erforderlich, damit das langsame Abfrageprotokoll funktioniert. Sie kann jedoch hilfreich sein, um ineffiziente Abfragen zu erkennen.

Kommentieren Sie jede dieser Zeilen aus, indem Sie die führenden Pfundzeichen (#) entfernen. Der Abschnitt sieht nun so aus:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes
. . .

[.Hinweis]##

Note: Wenn Sie MySQL 8+ ausführen, befinden sich diese kommentierten Zeilen standardmäßig nicht in der Dateimysqld.cnf. Fügen Sie in diesem Fall die folgenden Zeilen am Ende der Datei hinzu:

/etc/mysql/mysql.conf.d/mysqld.cnf

. . .
slow_query_log = 1
slow_query_log_file = /var/log/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes

Speichern und schließen Sie die Datei, nachdem Sie das langsame Abfrageprotokoll aktiviert haben. Starten Sie dann den MySQL-Dienst neu:

sudo systemctl restart mysql

Mit diesen Einstellungen können Sie problematische Abfrageanweisungen finden, indem Sie das langsame Abfrageprotokoll anzeigen. Sie können dies mitless wie folgt tun:

sudo less /var/log/mysql_slow.log

Sobald Sie die Abfragen ausgewählt haben, die die Verlangsamung verursacht haben, finden Sie möglicherweise unseren Leitfaden zuHow To Optimize Queries and Tables in MySQL and MariaDB on a VPS, der bei der Optimierung hilfreich ist.

Darüber hinaus enthält MySQL die AnweisungEXPLAIN, die Informationen darüber enthält, wie MySQL Abfragen ausführt. This page from the official MySQL documentation bietet Einblicke in die Verwendung vonEXPLAIN zum Hervorheben ineffizienter Abfragen.

Hilfe zum Verständnis grundlegender Abfragestrukturen finden Sie in unserenIntroduction to MySQL Queries.