Überprüfen langsamer Abfragen und Prozesse MySQL
In diesem Artikel wird über einige häufige MySQL-Probleme (langsame Abfragen, zu lange dauernde Prozesse) gesprochen, die sich negativ auf die Website eines Händlers und die Lösungen, die sie angeben, auswirken können.
Überprüfen von „langsamen Abfragen“ in MySQL
Beschreibung
Wenn Sie einen Ausfall hatten, der möglicherweise durch eine überlastete Datenbank verursacht wurde, helfen Ihnen diese Schritte, das Protokoll der langsamen Abfragen Ihrer Datenbank zu überprüfen.
Abfragen mithilfe der MySQL-Befehlszeile analysieren (Adobe Commerce Cloud/On-Premise/Magento Open Source)
-
Melden Sie sich über die Befehlszeile bei Ihrer MySQL-Befehlszeile (Adobe Commerce On-Premise/Magento Open Source) oder auf Ihrem Cloud-Server an (Adobe Commerce in Cloud-Infrastruktur).
-
Überprüfen Sie das langsame Abfrageprotokoll auf Abfragen, die länger als 50 Sekunden dauern:
code language-bash grep 'Query_time: [5-9][0-9]|Query_time: [0-9][0-9][0-9]' /var/log/mysql/mysql-slow.log -A 3
-
Wechseln Sie zu https://www.unixtimestamp.com/ (oder einem ähnlichen Unix-Zeitstempelkonverter) und fügen Sie den Zeitstempel ein, der angibt, wann die langsame Abfrage ausgeführt wurde.
-
Wenn die Zeit mit einem aufgetretenen Ausfall der Site korreliert, kann dies durch eine überlastete Datenbank verursacht werden. Überprüfen Sie, welche Lasten zu diesem Zeitpunkt in der Datenbank waren. Beispiele für solche Lasten sind:
- Cron-Prozesse
- Traffic (Bots oder Personen)
- Import-/Exportskripte
- Erstellen von Dumps
Abfragen mithilfe der Percona Toolkit analysieren (nur Adobe Commerce Pro: Cloud-Architektur)
Wenn Ihr Adobe Commerce-Projekt in der Pro-Architektur bereitgestellt wird, können Sie die Percona Toolkit verwenden, um Abfragen zu analysieren.
-
Führen Sie den
pt-query-digest --type=slowlog
-Befehl für MySQL-Protokolle mit langsamen Abfragen aus.- Den Speicherort der langsamen Abfrageprotokolle finden Sie unter Log locations > Service Logs in unserer Entwicklerdokumentation.
- Weitere Informationen finden Sie in der Dokumentation Percona Toolkit > pt-querydigest.
-
Führen Sie basierend auf den gefundenen Problemen Schritte aus, um die Abfrage zu beheben, sodass sie schneller ausgeführt wird.
Überprüfen der MySQL-„Prozessliste“
Beschreibung
Auf diese Weise lässt sich feststellen, ob der MySQL-Server aktiv ist und keine hängengebliebenen Abfragen vorliegen.
Schritte
-
Melden Sie sich über die Befehlszeile bei Ihrer MySQL-Befehlszeile (Adobe Commerce On-Premise/Magento Open Source) oder auf Ihrem Cloud-Server an (Adobe Commerce in Cloud-Infrastruktur).
-
Melden Sie sich mit dem folgenden Code-Block bei MySQL an. Dadurch wird der Anmeldevorgang automatisiert.
code language-mysql `export DB_NAME=$(grep [\']db[\'] -A 20 app/etc/env.php | grep dbname | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/['][,]//"); export MYSQL_HOST=$(grep [\']db[\'] -A 20 app/etc/env.php | grep host | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/['][,]//"); export DB_USER=$(grep [\']db[\'] -A 20 app/etc/env.php | grep username | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/['][,]//"); export MYSQL_PWD=$(grep [\']db[\'] -A 20 app/etc/env.php | grep password | head -n1 | sed "s/.*[=][>][ ]*[']//" | sed "s/[']$//" | sed "s/['][,]//"); mysql -h $MYSQL_HOST -u $DB_USER --password=$MYSQL_PWD $DB_NAME -U -A -e 'show processlist;`
-
Wenn Sie einen Fehler erhalten oder die Antwort länger als 30 Sekunden dauert, sollten Sie sich an den Support wenden, um den MySQL-Server zu überprüfen.
-
Überprüfung der Beispielausgabe.
-
Hier einige Beispielausgaben:
code language-mysql `$ mysql -h $MYSQL_HOST -u $DB_USER --password=$MYSQL_PWD $DB_NAME -U -A -e 'show processlist;' +-----------+---------------+--------------------+---------------+---------+------+----------------+------------------------------------------------------------------------------------------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +-----------+---------------+--------------------+---------------+---------+------+----------------+------------------------------------------------------------------------------------------------------+----------+ | 123456789 | abcdefghijklm | 192.168.7.10:12345 | abcdefghijklm | Query | 0 | Writing to net | SELECT `magento_versionscms_hierarchy_node`.*, `page_table`.`title` AS `page_title`, `page_table`.`i | 0.000 | | 123456788 | abcdefghijklm | 192.168.7.10:12344 | abcdefghijklm | Sleep | 0 | | NULL | 0.000 | | 123456777 | abcdefghijklm | 192.168.7.10:12333 | abcdefghijklm | Sleep | 0 | | NULL | 0.000 | | 123456666 | abcdefghijklm | 192.168.5.8:12222 | abcdefghijklm | Sleep | 0 | | NULL | 0.000 |`
-
Überprüfen Sie die Spalte „Zeit“ auf einen Zeitraum größer als 1800 Sekunden. Dies bedeutet, dass der Abschluss eines Prozesses möglicherweise zu viel Zeit in Anspruch nimmt. Beachten Sie den Status der Prozesse in der Spalte „Status“.
-
Überprüfen Sie die Abfragen und töten Sie sie möglicherweise, wenn festgestellt wird, dass sie für diesen Zeitraum nicht ausgeführt werden. Möglicherweise werden die lang laufenden Abfragen erwartet.
Verwandtes Lesen
- MySQL „ProcessList-Syntax anzeigen in dev.mysql.com.
- MySQL Kill Syntax in dev.mysql.com.
- Sicherheit, Leistung und Datenverarbeitung in unserer Entwicklerdokumentation.
- MySQL-Hilfe in unserer Entwicklerdokumentation.