Ich habe eine innoDB-Tabelle, die Online-Benutzer aufzeichnet. Es wird bei jeder Seitenaktualisierung durch einen Benutzer aktualisiert, um zu verfolgen, auf welchen Seiten er sich befindet und wann er zuletzt auf die Site zugegriffen hat. Ich habe dann einen Cron, der alle 15 Minuten läuft, um alte Datensätze zu löschen.
Ich habe einen Deadlock gefunden, als ich versucht habe, einen Lock zu bekommen. Versuchen Sie, die Transaktion 'letzte Nacht etwa 5 Minuten lang neu zu starten. Dies scheint der Fall zu sein, wenn INSERTs in dieser Tabelle ausgeführt werden. Kann jemand vorschlagen, wie dieser Fehler vermieden werden kann?
=== BEARBEITEN ===
Hier sind die Abfragen, die ausgeführt werden:
Erster Besuch auf der Website:
INSERT INTO onlineusers SET
ip = 123.456.789.123,
datetime = now(),
userid = 321,
page = '/thispage',
area = 'thisarea',
type = 3
Auf jeder Seite aktualisieren:
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
Es zählt dann einige Statistiken, um einige Statistiken zu protokollieren (z. B. Mitglieder online, Besucher online).