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