कोई भी समाधान जो एक लेन-देन में इतना अधिक डेटा हटाने का प्रयास करता है, वह रोलबैक सेगमेंट को अभिभूत कर देगा और बहुत सारी प्रदर्शन समस्याओं का कारण बनेगा।
मदद करने के लिए एक अच्छा टूल है pt-archiver
. यह यथासंभव कुशलता से पंक्तियों के मध्यम आकार के बैचों पर वृद्धिशील संचालन करता है। pt-archiver
विकल्पों के आधार पर पंक्तियों को कॉपी, स्थानांतरित या हटा सकते हैं।
दस्तावेज़ में अनाथ पंक्तियों को हटाने का एक उदाहरण शामिल है, जो वास्तव में आपका परिदृश्य है:
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
इसे निष्पादित करने में डेटा को हटाने में काफी अधिक समय लगेगा, लेकिन यह बहुत अधिक संसाधनों का उपयोग नहीं करेगा, और आपके मौजूदा डेटाबेस पर सेवा को बाधित किए बिना। मैंने पुराने डेटा की करोड़ों पंक्तियों को शुद्ध करने के लिए इसका सफलतापूर्वक उपयोग किया है।
pt-archiver
MySQL के लिए Percona टूलकिट
का हिस्सा है , स्क्रिप्ट का एक मुफ़्त (GPL) सेट जो MySQL और संगत डेटाबेस के साथ सामान्य कार्यों में मदद करता है।