Deadlocks in MySQL
In diesem Artikel wird über Deadlocks in MySQL gesprochen, um sie zu identifizieren und zu beheben, wenn sie zu einem Ausfall einer Site, einem blockierten Datenbankimport oder anderen Adobe Commerce-Problemen führen.
Betroffene Produkte und Versionen
- Adobe Commerce On-Premises 2.2.x und 2.3.x
- Adobe Commerce auf Cloud-Infrastrukturen 2.2.x und 2.3.x
Problem
Deadlocks in MySQL treten auf, wenn zwei oder mehr Transaktionen einander halten und Sperren anfordern. Deadlocks, die vorhanden sind, deuten nicht immer auf ein Problem hin, sind jedoch häufig ein Symptom für ein anderes MySQL- oder Adobe Commerce-Problem, das aufgetreten ist.
Häufig wird in den Anwendungs-, Bereitstellungs- oder MySQL-Protokollen ein „Deadlock“-Fehler oder der Fehler „Deadlock gefunden, beim Versuch, eine Sperre zu erhalten, versucht wird, die Transaktion neu zu starten“
Ursache
Deadlocks können mehrere Ursachen haben, aber die häufigste ist, wenn Sie irgendeine Interaktion (Website/Prozesse/Cron-Aufträge/andere Benutzer/MySQL-Wartung/MySQL-Importe) durchführen, während Sie DML/DDL-Abfragen gleichzeitig ausführen.
Als Beispiel ist es eine Best Practice, einen blockierten MySQL-Datenbankimport zu vermeiden, indem Sie Ihre Site zunächst in den Wartungsmodus versetzen, um zu vermeiden, dass SQL-Anfragen an die Datenbank gesendet werden, die zu Deadlocks und einem blockierten Datenbankimport führen könnten.
Lösung
-
Überprüfen Sie die Anwendungs-, Bereitstellungs- oder MySQL-Protokolle auf Deadlockfehler:
-
Überprüfen Sie mit dem Befehl
mysql -e 'show full processlist';
Ihre MySQL-Prozessliste auf laufende Prozesse -
Wenn in Adobe Commerce in der Cloud-Infrastruktur, überprüfen Sie, ob MySQL-Slave aktiviert ist. Lesen Sie diesen Artikel: Variablen bereitstellen (MYSQL_USE_SLAVE_CONNECTION).
-
Je nach den jeweiligen Fehlern kann sich die Lösung selbst präsentieren, oder Sie müssen Ihre hilfreichen Protokollinformationen angeben, wenn Sie ein „Support-Ticket öffnen.