한 고객이 채팅에서 @all 멘션을 활성화했는데, 16,000명 규모의 채널이 두 개나 있었습니다. 정말 흥미로운 상황이었습니다!
전체 멘션을 19번 사용한 후, 고객은 이를 빠르게 비활성화했습니다. 하지만 12시간이 지난 후에도 그들의 (성능이 좋은) 시스템은 여전히 높은 CPU 부하를 겪고 있었습니다.
이 문제는 mentions 테이블에서 문제의 320,000개 레코드를 삭제함으로써 해결되었습니다.
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 명령으로는 좋은 결과를 얻을 수 없었지만, 상당한 처리 작업을 수행하고 있었던 것은 분명했습니다. 모든 인덱스는 정상적으로 설정되어 있었습니다.