我有一個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-03-06 19:31:26
http://dev.mysql.com/doc/refman/5.1/en/innodb-deadlocks.html - 運行「顯示引擎innodb狀態」將提供有用的診斷。 – Martin 2010-03-07 05:48:18