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).