Tengo una tabla innoDB que registra usuarios en línea. Se actualiza en cada actualización de página por un usuario para realizar un seguimiento de las páginas en las que se encuentran y su última fecha de acceso al sitio. Luego tengo un cron que se ejecuta cada 15 minutos para ELIMINAR registros antiguos.Cómo evitar mysql 'Deadlock encontrado al intentar obtener el bloqueo; intente reiniciar la transacción '
Recibí un 'Interbloqueo encontrado al intentar obtener el bloqueo; intente reiniciar la transacción 'durante aproximadamente 5 minutos anoche y parece ser cuando se ejecuta INSERT en esta tabla. ¿Puede alguien sugerir cómo evitar este error?
=== === EDITAR
Estas son las consultas que se ejecutan:
primera visita al sitio:
INSERT INTO onlineusers SET
ip = 123.456.789.123,
datetime = now(),
userid = 321,
page = '/thispage',
area = 'thisarea',
type = 3
En cada actualización de la página:
UPDATE onlineusers SET
ips = 123.456.789.123,
datetime = now(),
userid = 321,
page = '/thispage',
area = 'thisarea',
type = 3
WHERE id = 888
Cron cada 15 minutos:
DELETE FROM onlineusers WHERE datetime <= now() - INTERVAL 900 SECOND
A continuación, hace algunos cálculos para registrar algunos datos (por ejemplo: miembros en línea, los visitantes en línea).
¿Puede proporcionar más detalles sobre la estructura de la mesa? ¿Hay algún índice agrupado o no agrupado? –
http://dev.mysql.com/doc/refman/5.1/en/innodb-deadlocks.html - Ejecutar "show engine innodb status" proporcionaría diagnósticos útiles. – Martin