ฉันมีตาราง innoDB ซึ่งบันทึกผู้ใช้ออนไลน์ มันได้รับการปรับปรุงในทุกหน้ารีเฟรชโดยผู้ใช้เพื่อติดตามว่าพวกเขาอยู่ในหน้าและวันที่เข้าถึงล่าสุดไปยังเว็บไซต์ ฉันมี cron ที่ทำงานทุก ๆ 15 นาทีเพื่อลบระเบียนเก่า
ฉันพบ 'Deadlock เมื่อพยายามล็อค; ลองรีสตาร์ทธุรกรรม 'เป็นเวลาประมาณ 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
Cron ทุก ๆ 15 นาที:
DELETE FROM onlineusers WHERE datetime <= now() - INTERVAL 900 SECOND
จากนั้นจะนับการบันทึกสถิติบางอย่าง (เช่นสมาชิกออนไลน์ผู้เยี่ยมชมออนไลน์)