Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Excluir grandes quantidades de dados de uma tabela enorme


Qualquer solução que tente excluir tantos dados em uma transação sobrecarregará o segmento de rollback e causará muitos problemas de desempenho.

Uma boa ferramenta para ajudar é pt-archiver . Ele executa operações incrementais em lotes de linhas de tamanho moderado, com a maior eficiência possível. pt-archiver pode copiar, mover ou excluir linhas dependendo das opções.

A documentação inclui um exemplo de exclusão de linhas órfãs, que é exatamente o seu cenário:
pt-archiver --source h=host,D=db,t=VALUE --purge \
  --where 'NOT EXISTS(SELECT * FROM `KEY` WHERE key_id=`VALUE`.key_id)' \
  --limit 1000 --commit-each

Executar isso levará muito mais tempo para excluir os dados, mas não usará muitos recursos e sem interromper o serviço em seu banco de dados existente. Eu o usei com sucesso para limpar centenas de milhões de linhas de dados desatualizados.

pt-archiver faz parte do Percona Toolkit for MySQL , um conjunto gratuito (GPL) de scripts que auxiliam em tarefas comuns com MySQL e bancos de dados compatíveis.