我有一个innoDB表记录在线用户。它在用户刷新的每个页面上得到更新,以跟踪他们在哪些页面上以及他们上次访问网站的日期。然后我有一个每15分钟运行一次的cron来删除旧记录。如何避免mysql'尝试获取锁时发现死锁;尝试重新启动交易'
我得到了'尝试锁定时发现的死锁;尝试重新启动事务'昨天晚上大约5分钟,它似乎是在此表中运行INSERT时。有人可以建议如何避免这个错误?
===编辑===
这里是正在运行的查询:
第一次访问网站:
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分钟:
DELETE FROM onlineusers WHERE datetime <= now() - INTERVAL 900 SECOND
然后做一些罪名来记录一些统计数据(即:会员在线,访客在线)。
2010-02-25
David
+0
你能提供一些关于表结构的更多细节吗?有没有聚集或非聚集索引? –
2010-03-06 19:31:26
+9
http://dev.mysql.com/doc/refman/5.1/en/innodb-deadlocks.html - 运行“显示引擎innodb状态”将提供有用的诊断。 –
2010-03-07 05:48:18