У одного из клиентов в чате были включены упоминания @all в двух каналах, где вместе насчитывалось 16 тысяч пользователей. Было весело!
После 19 таких упоминаний они быстро отключили эту возможность. Спустя 12 часов их (мощная) система всё ещё работала с высокой нагрузкой на процессор.
Проблема была решена удалением 320 тысяч проблемных записей из таблицы упоминаний:
delete from chat_mentions
where chat_message_id in (
(select chat_message_id
from chat_mentions
group by chat_message_id having count(*) > 100)
);
Но мы всё ещё не понимали, почему это вызывало столько проблем.
Оставалось несколько экземпляров выполнения этого запроса.
Поскольку строки уже были удалены, команда EXPLAIN не дала полезных результатов, но очевидно, что система выполняла очень тяжёлую работу. Все индексы были на месте.