Każde rozwiązanie, które próbuje usunąć tak wiele danych w jednej transakcji, przytłoczy segment wycofywania i spowoduje wiele problemów z wydajnością.
Dobrym narzędziem do pomocy jest pt-archiver
. Wykonuje operacje przyrostowe na partiach wierszy o średniej wielkości, tak wydajnie, jak to tylko możliwe. pt-archiver
może kopiować, przenosić lub usuwać wiersze w zależności od opcji.
Dokumentacja zawiera przykład usuwania osieroconych wierszy, co jest dokładnie twoim scenariuszem:
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
Wykonanie tego zajmie znacznie więcej czasu, aby usunąć dane, ale nie spowoduje to użycia zbyt wielu zasobów i bez przerywania usługi w istniejącej bazie danych. Użyłem go z powodzeniem do usunięcia setek milionów wierszy nieaktualnych danych.
pt-archiver
jest częścią Percona Toolkit for MySQL
, darmowy (GPL) zestaw skryptów, które pomagają w wykonywaniu typowych zadań z MySQL i kompatybilnymi bazami danych.