我有一个记录在线用户的InnoDB表格。每次用户刷新页面时,它都会更新以跟踪他们所在的页面和最后访问站点的日期。然后,我有一个cron定时器,每15分钟运行一次,用于删除旧记录。
昨晚在运行插入此表时,出现了“Deadlock found when trying to get lock; try restarting transaction”错误,持续了约5分钟。有人能提供避免此错误的建议吗?
=== 编辑 ===
下面是正在运行的查询:
首次访问网站:
INSERT INTO onlineusers SET
ip = 123.456.789.123,
datetime = now(),
userid = 321,
page = '/thispage',
area = 'thisarea',
type = 3
每次刷新页面:
UPDATE onlineusers SET
ips = 123.456.789.123,
datetime = now(),
userid = 321,
page = '/thispage',
area = 'thisarea',
type = 3
WHERE id = 888
每15分钟执行一次的Cron:
DELETE FROM onlineusers WHERE datetime <= now() - INTERVAL 900 SECOND
然后它执行一些统计以记录一些统计数据(例如:在线成员,在线访客)。