Solusi apa pun yang mencoba menghapus begitu banyak data dalam satu transaksi akan membebani segmen rollback dan menyebabkan banyak masalah kinerja.
Alat yang baik untuk membantu adalah pt-archiver
. Ini melakukan operasi tambahan pada kumpulan baris berukuran sedang, seefisien mungkin. pt-archiver
dapat menyalin, memindahkan, atau menghapus baris tergantung pada opsi.
Dokumentasi menyertakan contoh penghapusan baris yatim piatu, yang persis seperti skenario Anda:
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
Eksekusi ini akan memakan waktu lebih lama secara signifikan untuk menghapus data, tetapi tidak akan menggunakan terlalu banyak sumber daya, dan tanpa mengganggu layanan pada database Anda yang sudah ada. Saya telah berhasil menggunakannya untuk membersihkan ratusan juta baris data usang.
pt-archiver
adalah bagian dari Percona Toolkit untuk MySQL
, kumpulan skrip (GPL) gratis yang membantu tugas umum dengan MySQL dan database yang kompatibel.