Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Löschen Sie riesige Datenmengen aus einer riesigen Tabelle

Jede Lösung, die versucht, so viele Daten in einer Transaktion zu löschen, wird das Rollback-Segment überfordern und viele Leistungsprobleme verursachen.

Ein gutes Hilfsmittel ist pt-archiver . Es führt so effizient wie möglich inkrementelle Operationen an Zeilenstapeln mittlerer Größe durch. pt-archiver kann je nach Optionen Zeilen kopieren, verschieben oder löschen.

Die Dokumentation enthält ein Beispiel zum Löschen verwaister Zeilen, was genau Ihrem Szenario entspricht:

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

Die Ausführung dauert erheblich länger, um die Daten zu löschen, verbraucht jedoch nicht zu viele Ressourcen und ohne den Dienst Ihrer vorhandenen Datenbank zu unterbrechen. Ich habe es erfolgreich verwendet, um Hunderte Millionen Zeilen mit veralteten Daten zu löschen.

pt-archiver ist Teil des Percona Toolkit for MySQL , ein kostenloser (GPL) Satz von Skripten, die allgemeine Aufgaben mit MySQL und kompatiblen Datenbanken unterstützen.