Bất kỳ giải pháp nào cố gắng xóa quá nhiều dữ liệu trong một giao dịch sẽ áp đảo phân đoạn khôi phục và gây ra nhiều vấn đề về hiệu suất.
Một công cụ hữu ích để trợ giúp là pt-archiver
. Nó thực hiện các hoạt động gia tăng trên các lô hàng có kích thước vừa phải, càng hiệu quả càng tốt. pt-archiver
có thể sao chép, di chuyển hoặc xóa các hàng tùy thuộc vào tùy chọn.
Tài liệu bao gồm một ví dụ về cách xóa các hàng không có, đây chính xác là tình huống của bạ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
Việc thực thi điều này sẽ mất nhiều thời gian hơn để xóa dữ liệu, nhưng nó sẽ không sử dụng quá nhiều tài nguyên và không làm gián đoạn dịch vụ trên cơ sở dữ liệu hiện có của bạn. Tôi đã sử dụng nó thành công để xóa hàng trăm triệu hàng dữ liệu lỗi thời.
pt-archiver
là một phần của Bộ công cụ Percona cho MySQL
, một bộ tập lệnh (GPL) miễn phí giúp thực hiện các tác vụ phổ biến với MySQL và cơ sở dữ liệu tương thích.