Heim > Datenbank > MySQL-Tutorial > Wie behebt man MySQL-Deadlock-Fehler, die durch widersprüchliche Transaktionssperren verursacht werden?

Wie behebt man MySQL-Deadlock-Fehler, die durch widersprüchliche Transaktionssperren verursacht werden?

Linda Hamilton
Freigeben: 2024-12-18 09:37:14
Original
650 Leute haben es durchsucht

How to Resolve MySQL Deadlock Errors Caused by Conflicting Transaction Locks?

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage