5000 या तो के बैचों में पंक्तियों को हटाने के लिए बड़ी संख्या में पंक्तियों के साथ तालिका से हटाए जाने पर मैंने इसे उपयोगी पाया है (मैं आमतौर पर यह देखने के लिए परीक्षण करता हूं कि कौन सा मान सबसे तेज़ काम करता है, कभी-कभी यह 5000 पंक्तियां होती है, कभी-कभी 10,000, आदि) . यह प्रत्येक डिलीट ऑपरेशन को 400 मिलियन रिकॉर्ड को खत्म करने के लिए एक स्टेटमेंट के लिए लंबे समय तक प्रतीक्षा करने के बजाय जल्दी से पूरा करने की अनुमति देता है।
SQL सर्वर 2005 में, कुछ इस तरह काम करना चाहिए (निश्चित रूप से पहले परीक्षण करें):
WHILE EXISTS ( SELECT * FROM giganticTable WHERE exp_date < getDate())
BEGIN
DELETE TOP(5000) FROM giganticTable WHERE exp_date < getDate()
END
मैं देखूंगा कि लॉग फ़ाइल आकार में बैचों को हटाने से क्या होता है। यदि यह अभी भी लॉग को उड़ा रहा है, तो आप पुनर्प्राप्ति मॉडल को सरल , रिकॉर्ड्स को हटाना, और फिर बल्क लॉग्ड पर वापस जाना, लेकिन केवल तभी जब सिस्टम कुछ हालिया डेटा के नुकसान को सहन कर सके। मैं निश्चित रूप से उस प्रक्रिया का प्रयास करने से पहले एक पूर्ण बैकअप बनाउंगा। यह थ्रेड यह भी सुझाव देता है कि आप केवल निर्दिष्ट ट्रंकेट के साथ लॉग बैकअप के लिए नौकरी सेट कर सकते हैं, ताकि यह एक और विकल्प हो। उम्मीद है कि आपके पास एक उदाहरण है जिसके साथ आप परीक्षण कर सकते हैं, लेकिन मैं यह देखने के लिए बैच डिलीट से शुरू करूंगा कि यह प्रदर्शन और लॉग फ़ाइल आकार को कैसे प्रभावित करता है।