J'ai une table innoDB qui enregistre les utilisateurs en ligne. Il est mis à jour à chaque actualisation de page par un utilisateur pour garder une trace des pages sur lesquelles il se trouve et de sa dernière date d'accès au site. J'ai ensuite un cron qui s'exécute toutes les 15 minutes pour SUPPRIMER les anciens enregistrements.
J'ai trouvé un «Deadlock» en essayant de verrouiller; essayez de redémarrer la transaction 'pendant environ 5 minutes la nuit dernière et cela semble être le cas lors de l'exécution d'INSERT dans ce tableau. Quelqu'un peut-il suggérer comment éviter cette erreur?
=== EDIT ===
Voici les requêtes en cours d'exécution:
Première visite sur le site:
INSERT INTO onlineusers SET
ip = 123.456.789.123,
datetime = now(),
userid = 321,
page = '/thispage',
area = 'thisarea',
type = 3
Sur chaque page, actualisez:
UPDATE onlineusers SET
ips = 123.456.789.123,
datetime = now(),
userid = 321,
page = '/thispage',
area = 'thisarea',
type = 3
WHERE id = 888
Cron toutes les 15 minutes:
DELETE FROM onlineusers WHERE datetime <= now() - INTERVAL 900 SECOND
Il effectue ensuite quelques décomptes pour enregistrer certaines statistiques (par exemple: membres en ligne, visiteurs en ligne).