386 Stimmen

Wie vermeidet man MySQL 'Deadlock found when trying to get lock; try restarting transaction'?

Ich habe eine innoDB-Tabelle, die Online-Benutzer aufzeichnet. Sie wird bei jeder Seitenaktualisierung durch einen Benutzer aktualisiert, um zu verfolgen, auf welchen Seiten sie sich befinden und wann sie das letzte Mal auf die Website zugegriffen haben. Ich habe dann einen Cron, der alle 15 Minuten läuft, um alte Datensätze zu löschen.

Gestern Abend erhielt ich etwa 5 Minuten lang die Meldung "Deadlock found when trying to get lock; try restarting transaction", und das scheint beim Ausführen von INSERTs in diese Tabelle aufzutreten. Kann mir jemand vorschlagen, wie ich diesen Fehler vermeiden kann?

\=== EDIT ===

Hier sind die Abfragen, die ausgeführt werden:

Erster Besuch vor Ort:

INSERT INTO onlineusers SET
ip = 123.456.789.123,
datetime = now(),
userid = 321,
page = '/thispage',
area = 'thisarea',
type = 3

Bei jeder Aktualisierung der Seite:

UPDATE onlineusers SET
ips = 123.456.789.123,
datetime = now(),
userid = 321,
page = '/thispage',
area = 'thisarea',
type = 3
WHERE id = 888

Cron alle 15 Minuten:

DELETE FROM onlineusers WHERE datetime <= now() - INTERVAL 900 SECOND

Dann werden einige Zählungen durchgeführt, um einige Statistiken zu protokollieren (z. B.: Mitglieder online, Besucher online).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X