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

मैं एसएसआईएसडीबी को कैसे साफ कर सकता हूं?

फिल ब्रैमर इसमें और एसएसआईएस कैटलॉग की देखभाल और फीडिंग से संबंधित कई अन्य चीजों में भाग गया, जिसे उन्होंने अपनी पोस्ट कैटलॉग इंडेक्सिंग अनुशंसाएं

मूल समस्या

मूल समस्या यह है कि एमएस ने आरआई को ध्यान में रखते हुए एसएसआईएस को डिजाइन करने का प्रयास किया लेकिन वे आलसी थे और कैस्केडिंग डिलीट को होने दिया और उन्हें स्पष्ट रूप से संभालने की अनुमति दी।

संकल्प

जब तक 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 . के साथ आप "सामान्य" टेबल अभी भी मौजूद लेकिन खाली पाएंगे सभी डेटा वाले संस्करण।

संदर्भ



  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. NVarchar उपसर्ग गलत अनुक्रमणिका का चयन करने का कारण बनता है

  3. डेटिफ GETDATE Add

  4. एसक्यूएल सर्वर रेगेक्स

  5. एसक्यूएल सर्वर 2005 एक्सएमएल डेटा प्रकार में सीडीएटीए को INSERT पर हटा दिया गया है