Mysql
 sql >> Database >  >> RDS >> Mysql

Elimina enormi quantità di dati da un'enorme tabella

Qualsiasi soluzione che tenti di eliminare così tanti dati in una transazione travolgerà il segmento di rollback e causerà molti problemi di prestazioni.

Un buon strumento di aiuto è pt-archiver . Esegue operazioni incrementali su batch di righe di dimensioni moderate, nel modo più efficiente possibile. pt-archiver può copiare, spostare o eliminare righe a seconda delle opzioni.

La documentazione include un esempio di eliminazione di righe orfane, che è esattamente il tuo scenario:

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

L'esecuzione di questa operazione richiederà molto più tempo per eliminare i dati, ma non utilizzerà troppe risorse e senza interrompere il servizio sul database esistente. L'ho usato con successo per eliminare centinaia di milioni di righe di dati obsoleti.

pt-archiver fa parte del Percona Toolkit for MySQL , un set gratuito (GPL) di script che aiutano le attività comuni con MySQL e database compatibili.