फिल ब्रैमर इसमें और एसएसआईएस कैटलॉग की देखभाल और फीडिंग से संबंधित कई अन्य चीजों में भाग गया, जिसे उन्होंने अपनी पोस्ट कैटलॉग इंडेक्सिंग अनुशंसाएं ।
मूल समस्या
मूल समस्या यह है कि एमएस ने आरआई को ध्यान में रखते हुए एसएसआईएस को डिजाइन करने का प्रयास किया लेकिन वे आलसी थे और कैस्केडिंग डिलीट को होने दिया और उन्हें स्पष्ट रूप से संभालने की अनुमति दी।
संकल्प
जब तक MS चीजों के काम करने के तरीके में बदलाव नहीं करता, तब तक समर्थित विकल्प है
मुझे पता है कि मेरे वर्तमान क्लाइंट में, हम केवल तड़के ही डेटा लोड करते हैं इसलिए SSISDB व्यावसायिक घंटों के दौरान शांत रहता है।
यदि एक शांत अवधि के दौरान रखरखाव कार्य चलाना कोई विकल्प नहीं है, तो आप कैस्केडिंग डिलीट को कम चूसें करने का प्रयास करने के लिए अपने स्वयं के डिलीट स्टेटमेंट को क्राफ्ट करने पर विचार कर रहे हैं। ।
मेरे वर्तमान ग्राहक पर, हम पिछले 10 महीनों से हर रात लगभग 200 पैकेज चला रहे हैं और इतिहास के 365 दिनों में भी हैं। परिमाण के क्रम में हमारी सबसे बड़ी टेबल हैं।
Schema Table RowCount
internal event_message_context 1,869,028
internal operation_messages 1,500,811
internal event_messages 1,500,803
उस सभी डेटा का ड्राइवर, internal.operations
इसमें केवल 3300 पंक्तियाँ हैं, जो फिल की टिप्पणी के अनुरूप है कि यह डेटा कितनी तेजी से बढ़ता है।
तो, operation_id
की पहचान करें पर्ज करने के लिए और लीफ टेबल से हटाए जाने के लिए वापस कोर में काम कर रहा है, internal.operations
टेबल।
USE SSISDB;
SET NOCOUNT ON;
IF object_id('tempdb..#DELETE_CANDIDATES') IS NOT NULL
BEGIN
DROP TABLE #DELETE_CANDIDATES;
END;
CREATE TABLE #DELETE_CANDIDATES
(
operation_id bigint NOT NULL PRIMARY KEY
);
DECLARE @DaysRetention int = 100;
INSERT INTO
#DELETE_CANDIDATES
(
operation_id
)
SELECT
IO.operation_id
FROM
internal.operations AS IO
WHERE
IO.start_time < DATEADD(day, [email protected], CURRENT_TIMESTAMP);
DELETE T
FROM
internal.event_message_context AS T
INNER JOIN
#DELETE_CANDIDATES AS DC
ON DC.operation_id = T.operation_id;
DELETE T
FROM
internal.event_messages AS T
INNER JOIN
#DELETE_CANDIDATES AS DC
ON DC.operation_id = T.operation_id;
DELETE T
FROM
internal.operation_messages AS T
INNER JOIN
#DELETE_CANDIDATES AS DC
ON DC.operation_id = T.operation_id;
-- etc
-- Finally, remove the entry from operations
DELETE T
FROM
internal.operations AS T
INNER JOIN
#DELETE_CANDIDATES AS DC
ON DC.operation_id = T.operation_id;
सामान्य चेतावनी लागू होती हैं
- इंटरनेट पर रैंडम के कोड पर भरोसा न करें
- सभी निर्भरताओं की पहचान करने के लिए ssistalk और/या सिस्टम तालिकाओं से आरेखों का उपयोग करें
- आपको केवल अपने हटाए गए कार्यों को छोटे कार्यों में विभाजित करने की आवश्यकता हो सकती है
- ऑपरेशन के लिए आरआई को छोड़ने से आपको लाभ हो सकता है लेकिन चेक विकल्प के साथ उन्हें फिर से सक्षम करना सुनिश्चित करें ताकि उन पर भरोसा किया जा सके।
- यदि संचालन 4 घंटे से अधिक समय तक चलता है, तो अपने डीबीए से परामर्श करें
जुलाई 2020 संपादित करें
टिम मिशेल के पास एसएसआईएस कैटलॉग स्वचालित सफाई और इसे साफ करने का एक बेहतर तरीका SSIS कैटलॉग डेटाबेस और उनकी नई किताब SSIS कैटलॉग:इंस्टॉल करें, प्रबंधित करें , अपने एंटरप्राइज ईटीएल इंफ्रास्ट्रक्चर को सुरक्षित और मॉनिटर करें
@Yong Jun Kim टिप्पणियों में नोट किया गया
यह निश्चित रूप से मामला है यदि आप Azure डेटा फ़ैक्टरी के भीतर SSIS IR का उपयोग कर रहे हैं। *_scaleout
. के साथ आप "सामान्य" टेबल अभी भी मौजूद लेकिन खाली पाएंगे सभी डेटा वाले संस्करण।
संदर्भ
- कैटलॉग इंडेक्सिंग अनुशंसाएं
- सावधान रहें SSIS सर्वर रखरखाव कार्य
- एसक्यूएल में पुराने डेटा को निकालने के लिए SSIS सर्वर मेंटेनेंस जॉब चलाते समय धीमा प्रदर्शन सर्वर 2012