Jakékoli řešení, které se pokouší odstranit tolik dat v jedné transakci, zahltí segment vrácení zpět a způsobí mnoho problémů s výkonem.
Dobrým nástrojem je pt-archiver
. Provádí přírůstkové operace na středně velkých dávkách řádků tak efektivně, jak je to jen možné. pt-archiver
může kopírovat, přesouvat nebo mazat řádky v závislosti na možnostech.
Dokumentace obsahuje příklad odstranění osamocených řádků, což je přesně váš scénář:
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
Smazání dat bude trvat podstatně déle, ale nespotřebuje příliš mnoho zdrojů a bez přerušení služby ve vaší stávající databázi. Úspěšně jsem jej použil k vyčištění stovek milionů řádků zastaralých dat.
pt-archiver
je součástí Percona Toolkit pro MySQL
, bezplatná (GPL) sada skriptů, které pomáhají běžným úkolům s MySQL a kompatibilními databázemi.