У меня есть таблица в MySQL 5 (InnoDB), которая используется в качестве очереди обработки демона, поэтому к ней обращаются очень. Обычно в день вставляется около 250 000 записей. Когда я выбираю записи для обработки, они считываются с использованием запроса FOR UPDATE для устранения условий гонки (все основано на транзакциях).
Сейчас я разрабатываю "архив очередей" и столкнулся с серьезной проблемой тупиковой блокировки. Мне нужно удалить «исполненные» записи из таблицы по мере их обработки (в реальном времени), но таблица время от времени блокируется, если я это делаю (два-три раза в день).
Я хотел бы перейти к отложенному удалению (один раз в день при низкой нагрузке), но это не решит проблему, а только сделает ее менее очевидной.
Существует ли обычная практика работы с таблицами с высокой нагрузкой в MySQL?