MySQL-Fehlerbehebung „Deadlock“
Der MySQL-Fehler „Deadlock beim Versuch, eine Sperre zu erhalten“ gefunden wird, wenn gleichzeitige Transaktionen versuchen, Ressourcen zu sperren gegensätzliche Sequenzen. Um dieses Problem zu beheben, stellen Sie sicher, dass alle Abfragen, die mehrere Schlüssel sperren, in aufsteigender Reihenfolge erfolgen.
In Ihrem Fall liegt das Problem möglicherweise bei den INSERT- und UPDATE-Abfragen, die mehrere Schlüssel sperren. Erwägen Sie, die WHERE-Klausel für beide Abfragen in aufsteigender Reihenfolge anzuordnen:
Erster Besuch der Website:
INSERT INTO onlineusers (ip, datetime, userid, page, area, type) VALUES (123.456.789.123, now(), 321, '/thispage', 'thisarea', 3) ORDER BY id;
Bei jeder Seitenaktualisierung:
UPDATE onlineusers (ip, datetime, page, area, type) SET ip = 123.456.789.123, datetime = now(), page = '/thispage', area = 'thisarea', type = 3 WHERE id = 888 ORDER BY id;
Schreiben Sie außerdem die DELETE-Abfrage neu, um nach zu sortieren id:
DELETE FROM onlineusers WHERE id IN ( SELECT id FROM onlineusers WHERE datetime < now() - INTERVAL 900 SECOND ORDER BY id ) u;
Durch die Durchsetzung einer aufsteigenden Reihenfolge für WHERE-Klauseln stellen Sie sicher, dass alle Transaktionen Schlüssel in der gleichen Reihenfolge sperren und so Deadlocks verhindern. Erwägen Sie die Integration einer clientseitigen Wiederholungslogik, um potenzielle Wiederholungsversuche im Falle von Deadlocks zu bewältigen.
Das obige ist der detaillierte Inhalt vonWie behebt man MySQL-Deadlock-Fehler, die durch widersprüchliche Transaktionssperren verursacht werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!