한 클라이언트가 채팅에서 @all 멘션을 활성화했는데, 16,000명 규모의 채널이 두 개였습니다. 그건 정말 ‘재밌는’ 상황이었습니다.
전체 대상 멘션이 19번 발생하자마자 그들은 이를 즉시 다시 끄고 말았습니다. 하지만 12시간이 지난 후에도 그들의 (성능이 좋은) 시스템은 여전히 높은 CPU 부하를 유지하고 있었습니다.
문제는 mentions 테이블에서 문제된 32만 건의 레코드를 삭제함으로써 해결되었습니다.
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 명령으로 좋은 결과를 얻기 어려웠지만, 상당한 처리 작업을 수행하고 있었음이 명확했습니다. 모든 인덱스는 이미 설정되어 있었습니다.