मैं एक उच्च लेन-देन डेटाबेस (~ 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 में अपग्रेड) पर हमेशा हाई एविलेबिलिटी क्लस्टर भी प्रतिकृति (एक अलग सर्वर पर वितरण) के साथ