Vermeiden von MySQL-Deadlocks in einer Tabelle von Online-Benutzern
Das Auftreten der Fehlermeldung „Deadlock beim Versuch, eine Sperre zu erhalten; versuchen Sie, die Transaktion neu zu starten“ gefunden kann ein frustrierendes Problem sein. Solche Deadlocks entstehen, wenn mehrere Transaktionen in widersprüchlicher Reihenfolge versuchen, Sperren für Ressourcen zu erlangen. Um dieses Problem zu lösen, ziehen Sie die folgenden Lösungen in Betracht:
Sortiervorgänge
Deadlocks treten häufig aufgrund von Vorgängen auf, die versuchen, Schlüssel in unterschiedlicher Reihenfolge zu sperren. Stellen Sie eine konsistente Reihenfolge für die Schließschlüssel her, indem Sie Ihre Abfragen entsprechend sortieren. Wenn Sie beispielsweise mehrere Abfragen haben, die sowohl Schlüssel(1) als auch Schlüssel(2) sperren, stellen Sie sicher, dass sie die Sperren immer in derselben Reihenfolge erhalten.
Abfrage DELETE anordnen
Ihre DELETE-Abfrage sollte auch so geändert werden, dass sie in aufsteigender Reihenfolge funktioniert. Die folgende optimierte Abfrage erreicht dies:
DELETE FROM onlineusers WHERE id IN ( SELECT id FROM onlineusers WHERE datetime < NOW() - INTERVAL 900 SECOND ORDER BY id ) u;
Automatische Client-Wiederholungsversuche
Die MySQL-Dokumentation empfiehlt automatische Client-Wiederholungsversuche bei Deadlocks. Implementieren Sie diese Logik in Ihrem Client-Code und legen Sie eine bestimmte Anzahl von Wiederholungsversuchen fest (z. B. 3), bevor Sie aufgeben.
Das obige ist der detaillierte Inhalt vonWie kann ich MySQL-Deadlocks in einer Online-Benutzertabelle effektiv vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!