Überprüfen langsamer Abfragen und Prozesse MySQL
In diesem Artikel werden einige häufige MySQL-Probleme (langsame Abfragen, zu lange Prozesse) vorgestellt, die sich negativ auf die Site eines Händlers und die von ihm angegebenen Lösungen auswirken können.
Überprüfen von MySQL "langsame Abfragen"
Beschreibung
Wenn Sie einen Ausfall hatten, der möglicherweise durch eine überlastete Datenbank verursacht wurde, helfen Ihnen diese Schritte beim Überprüfen des langsamen Abfrageprotokolls Ihrer Datenbank.
Abfragen mithilfe der MySQL-Befehlszeile analysieren (Adobe Commerce Cloud/On-Premise/Magento Open Source)
-
Melden Sie sich über die Befehlszeile (Adobe Commerce in der Cloud-Infrastruktur) bei Ihrer MySQL-Befehlszeile (Adobe Commerce On-Premise/Magento Open Source) oder auf Ihrem Cloud-Server an.
-
Prü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
-
Gehen Sie zu https://www.unixtimestamp.com/ (oder einem ähnlichen Unix-Zeitstempelkonverter) und fügen Sie den Zeitstempel von ein, von dem aus die langsame Abfrage ausgeführt wurde.
-
Wenn die Zeit mit einem Site-Ausfall korreliert, der bei Ihnen aufgetreten ist, kann dies durch eine überlastete Datenbank verursacht werden. Überprüfen Sie, ob die zu diesem Zeitpunkt in der Datenbank geladenen Daten angezeigt wurden. Beispiele für solche Lasten sind:
- Cron-Prozesse
- Traffic (Bots oder Personen)
- Skripte importieren/exportieren
- Erstellen von Dumps
Analysieren von Abfragen mit Percona Toolkit (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 Befehl
pt-query-digest --type=slowlog
für langsame MySQL-Abfrageprotokolle aus.- Informationen zum Speicherort der langsamen Abfrageprotokolle finden Sie unter Log locations > Service Logs in unserer Entwicklerdokumentation.
- Weitere Informationen finden Sie in der Dokumentation zu Percona Toolkit > pt-query-digest .
-
Führen Sie je nach den gefundenen Problemen Schritte aus, um die Abfrage zu korrigieren, damit sie schneller ausgeführt wird.
MySQL "Prozessliste"überprüfen
Beschreibung
Dadurch lässt sich feststellen, ob der MySQL-Server aktiv ist und keine blockierten Abfragen vorliegen.
Schritte
-
Melden Sie sich über die Befehlszeile (Adobe Commerce in der Cloud-Infrastruktur) bei Ihrer MySQL-Befehlszeile (Adobe Commerce On-Premise/Magento Open Source) oder auf Ihrem Cloud-Server an.
-
Melden Sie sich mit dem unten stehenden Codeblock 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.
-
Betrachten Sie die Beispielausgabe.
-
Hier finden Sie eine Beispielausgabe:
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, der größer als 1800 Sekunden ist. Dies bedeutet, dass ein Prozess möglicherweise zu viel Zeit in Anspruch nimmt. Notieren 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 diese Dauer nicht ausgeführt werden. Es ist möglich, dass die langwierigen Abfragen erwartet werden.
Verwandtes Lesen
- MySQL-Syntax der Verarbeitungsliste anzeigen in dev.mysql.com.
- MySQL Kill Syntax in dev.mysql.com.
- Sicherheit, Leistung und Datenverarbeitung in unserer Entwicklerdokumentation.
- MySQL-Hilfe in unserer Entwicklerdokumentation.