भूत सफाई सेटिंग्स


10

मैं एक उच्च लेन-देन डेटाबेस (~ 175k लेनदेन / मिनट औसतन चला रहा हूँ, प्रति घंटे लगभग 9M रिकॉर्ड जोड़ा गया और हटाया गया)

कुछ समय पहले तक यह बहुत ज्यादा मुद्दा नहीं रहा है क्योंकि हम ~ 7.5M रिकॉर्ड्स में शामिल हैं और हटाए गए हैं, लेकिन डेटा के नवीनतम प्रवाह के साथ भूत सफाई साफ-सफाई के साथ रखने में सक्षम नहीं दिखता है। टेबल / इंडेक्स पर अप्रयुक्त स्थान।

कुछ दिनों पहले हम 16 टेबल (ज्यादातर उन में से 2) में 53 जीबी 'अनयूज्ड स्पेस' तक पहुंच गए थे, जिसके परिणामस्वरूप हर 5 सेकंड में एक बार चलने और 10 से अधिक पेज चलाने के लिए इसे खोजने के लिए घोस्ट क्लीनअप प्रक्रिया शुरू की।

मेरा वर्तमान समाधान यह है कि सुबह-सुबह मैं निम्नलिखित कमांड के तीन सूत्र चला रहा हूं:

DECLARE @2hours datetime = dateadd(hour,2,getutcdate())

WHILE getutcdate() < @2hours
BEGIN
    DBCC FORCEGHOSTCLEANUP ('DBNAME') WITH  NO_INFOMSGS
END

रात से पहले बैकलॉग के साथ पकड़ने के लिए (जब हमारी सबसे हटती है)

मैं सोच रहा हूँ कि अगर 5 सेकंड और 10 पेज से डिफ़ॉल्ट सेटिंग्स को बदलने का कोई तरीका है, तो हर दूसरे को कहने के लिए या 20 से अधिक पृष्ठों को चलाने के लिए, क्या ऐसा करने का कोई तरीका है या क्या मुझे जारी रखने के लिए कई क्लीनअप प्रॉपर स्पिनिंग जारी रखना चाहिए डेटा, या यदि कोई अन्य कार्य है जो इसके साथ सहायता कर सकता है

सप्ताह में एक बार सबसे अधिक प्रभावित सूचकांक पर पुन: अनुक्रमण चलता है (अधिकांश हर दूसरे दिन होते हैं)

SQL सर्वर 2012 एंटरप्राइज SP3_CU8 (कल CU9 में अपग्रेड) पर हमेशा हाई एविलेबिलिटी क्लस्टर भी प्रतिकृति (एक अलग सर्वर पर वितरण) के साथ

जवाबों:


4

मैं सोच रहा हूं कि हर सेकंड कहने या 20 से अधिक पेज चलाने के लिए 5 सेकंड और 10 पेज से डिफ़ॉल्ट सेटिंग्स को बदलने का कोई तरीका है

कोई नहीं है। कम से कम मैं अब तक पता नहीं :-)

अगर कोई अन्य कार्य है जो इसके साथ सहायता कर सकता है

पॉल रैंडल के ब्लॉग से - एक तरीका लोगों को कभी-कभी एक टेबल या इंडेक्स स्कैन के द्वारा सब कुछ साफ करने के लिए भूत सफाई के लिए मजबूर करने पर विचार करना होता है (इस प्रकार भूत सफाई कार्य के लिए सभी हटाए गए रिकॉर्ड को कतारबद्ध करना)।

select * from [your_problem_table] with (index = Index_that_has_large_Deletes)

क्या आपके लिए तालिका को विभाजित करने और पुराने विभाजन को हटाने के बजाय शुद्ध करने की संभावना है ? FYI करें .. SQL सर्वर 2016 और ऊपर आपको अलग-अलग विभाजन को अलग करने की अनुमति देता है।

इसके अलावा, आप (TEST और कार्यान्वित) कर सकते हैं - घोस्ट क्लीन-अप (ट्रेस ध्वज 661) को अक्षम करें और तब rebuild index WITH ONLINE = ONसे आप एंटरप्राइज़ संस्करण का उपयोग कर रहे हैं।

यदि आप पुनरावृत्ति के साथ Alwayson (async के साथ) का उपयोग कर रहे हैं, तो ट्रेस ध्वज 1448 को सक्षम करना सुनिश्चित करें - यदि असिंक्रोनस सेकंडरी प्रतिकृतियों ने परिवर्तन के रिसेप्शन को स्वीकार नहीं किया है, तो भी प्रतिकृति लॉग रीडर को आगे बढ़ने की अनुमति देता है।

पॉल व्हाइट से स्प्लिट पेज और फॉरवर्डेड भूत को पढ़ने के लिए सुनिश्चित करें कि क्या आपकी टेबल में ट्रिगर या LOB कॉलम हैं जो धीमा हो जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.