Temos uma tabela mysql que a qualquer momento tem cerca de 12 milhões de linhas. Precisamos excluir dados antigos para manter o tamanho da tabela um pouco gerenciável.
No momento, estamos executando esta consulta diariamente, à meia-noite, usando um trabalho cron:
DELETE FROM table WHERE endTime < '1393632001'
A última vez que a consulta foi executada, examinou 4.602.400, levou mais de 3 minutos e a CPU passou pelo telhado.
O que podemos fazer para impedir que a CPU, as conexões de banco de dados síncronas, a profundidade das sugestões de disco, etc. sejam disparadas de maneira não razoável, enquanto ainda limpam dados antigos?
PS: Você notará que a consulta está realmente acontecendo em um momento bastante inoportuno do nosso ciclo de uso. Suponha que já alteramos o tempo da consulta para ocorrer no ponto mais baixo de uso a cada dia. Além disso, não há índice no "endTime" e eu preferiria mantê-lo dessa maneira, se possível, porque há uma tonelada de dados sendo inseridos com muita regularidade e pouca pesquisa.