У меня есть таблица innoDB, в которой записываются онлайн-пользователи. Он обновляется при каждом обновлении страницы пользователем, чтобы отслеживать, на каких страницах они находятся, и дату их последнего доступа к сайту. Затем у меня есть cron, который запускается каждые 15 минут для УДАЛЕНИЯ старых записей.
Я обнаружил тупик при попытке получить блокировку; попробуйте перезапустить транзакцию примерно на 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
Затем он делает некоторые подсчеты для регистрации некоторой статистики (например: участники онлайн, посетители онлайн).