Eu tenho um aplicativo em execução no Amazon MySQL/RDS que precisa manter 2 semanas de histórico transacional após o qual os dados podem (geralmente) ser limpos. Como essa não é uma regra rígida, não posso usar o particionamento por dia ou semana como meio de excluir dados antigos com mais eficiência.
Existem várias tabelas que precisam de limpeza, muitas delas têm vários índices e restrições de chave estrangeira (pai/filho).
Estou excluindo dados em partes (1000-3000 linhas por vez) e confirmando após cada parte. Após a exclusão de um determinado número de blocos, o código de limpeza é pausado por um determinado período de tempo.
Meu problema é que o processo é muito eficiente por 10 a 15 minutos, após o qual começo a ver grandes atrasos na exclusão de blocos de dados. Acredito que meu SQL seja o mais eficiente possível. Onde no MySQL posso procurar para entender melhor o gargalo? Se eu parar meu código e esperar de 15 a 20 minutos, o desempenho de exclusão será restaurado por mais 10 minutos.