Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

लॉग फ़ाइल को नियंत्रण से बाहर किए बिना मैं एक विशाल तालिका से समाप्त हो चुके डेटा को कैसे हटा सकता हूं?

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

मैं देखूंगा कि लॉग फ़ाइल आकार में बैचों को हटाने से क्या होता है। यदि यह अभी भी लॉग को उड़ा रहा है, तो आप पुनर्प्राप्ति मॉडल को सरल , रिकॉर्ड्स को हटाना, और फिर बल्क लॉग्ड पर वापस जाना, लेकिन केवल तभी जब सिस्टम कुछ हालिया डेटा के नुकसान को सहन कर सके। मैं निश्चित रूप से उस प्रक्रिया का प्रयास करने से पहले एक पूर्ण बैकअप बनाउंगा। यह थ्रेड यह भी सुझाव देता है कि आप केवल निर्दिष्ट ट्रंकेट के साथ लॉग बैकअप के लिए नौकरी सेट कर सकते हैं, ताकि यह एक और विकल्प हो। उम्मीद है कि आपके पास एक उदाहरण है जिसके साथ आप परीक्षण कर सकते हैं, लेकिन मैं यह देखने के लिए बैच डिलीट से शुरू करूंगा कि यह प्रदर्शन और लॉग फ़ाइल आकार को कैसे प्रभावित करता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. खाली पंक्तियों के लिए भी सप्ताह के आधार पर संक्षेप करें

  2. पाइप के दूसरे छोर पर कोई प्रक्रिया नहीं है

  3. उदाहरण के साथ OPENJSON का परिचय (SQL सर्वर)

  4. UTF-8 अक्षर के रूप में सहेजे जाते हैं ?? डालने पर, लेकिन अद्यतन पर सही ढंग से सहेजा जाता है

  5. R को SQL सर्वर डेटाबेस इंजन से कनेक्ट करें