अप्रयुक्त इंडेक्स सर्वश्रेष्ठ व्यवहार


11

इस क्वेरी के आधार पर, यदि मुझे कुल रीड्स की कम मात्रा (जैसे 0 या 0 के करीब, 1 या 2 की तरह) और उपयोगकर्ता अपडेट्स की उच्च या मध्यम राशि दिखाई देती है (मैं इस क्वेरी के साथ आवेषण या डिलीट नहीं ढूंढ सका) एक बड़ी पंक्ति गणना, मुझे सिद्धांत रूप में सूचकांक को दूर करना चाहिए ।

SELECT DISTINCT
    OBJECT_NAME(s.[object_id]) AS ObjectName
       , p.rows TableRows
       , i.name AS [INDEX NAME]
       , (user_seeks + user_scans + user_lookups) AS TotalReads
       , user_updates UserUpdates
FROM sys.dm_db_index_usage_stats s
    INNER JOIN sys.indexes i ON i.[object_id] = s.[object_id] 
        AND i.index_id = s.index_id 
    INNER JOIN sys.partitions p ON p.object_id = i.object_id
WHERE OBJECTPROPERTY(s.[object_id],'IsUserTable') = 1
       AND s.database_id = DB_ID()
       AND i.name IS NOT NULL
ORDER BY (user_seeks + user_scans + user_lookups) ASC

मैं यहां इस धारणा की सटीकता को पार करना चाहता हूं। उदाहरण के लिए, एक सूचकांक जो एक वर्ष से अधिक समय से अस्तित्व में है लेकिन कभी पढ़ा नहीं गया है, लेकिन अत्यधिक अद्यतन किया गया है, ऐसा लगता है कि यह एक बुरा विचार होगा। क्या कोई ऐसा परिदृश्य है जहाँ यह धारणा अमान्य है?

जवाबों:


15

यह DMV केवल पिछले SQL सर्वर पुनरारंभ के बाद से ही आँकड़े रखता है; दृश्य पूरी तरह से मिटा दिया जाता है और सब कुछ खरोंच से शुरू होता है।

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

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

इसके अलावा, कुछ ऐसा हो सकता है जो भविष्य में ऐसा हो, जिसके बारे में आपको जानकारी न हो - टैक्स सीज़न के लिए तैयार रिपोर्ट की एक श्रृंखला, आइए बताते हैं।

तो, मेरी सलाह है:

करने के लिए DMV का उपयोग पहचान को दूर करने के उम्मीदवार अनुक्रमित है, लेकिन एक बुलबुले में है कि फैसला लेने के लिए नहीं है - आप शेष काम करने के लिए निर्धारित करने के लिए क्यों एक सूचकांक की जरूरत हो सकता है यह छोड़ने से पहले से मौजूद हैं, जैसे कि यह वर्तमान में प्रयोग किया जा रहा है, भले ही यह लग रहा है ।


@AaronBertrand तो एक इतिहास पर नज़र रखने के साथ-साथ (अंतिम पुनरारंभ के समय) क्या इसके लिए एक अच्छा जोड़ होगा? आपको जवाब के लिए धन्यवाद।
डबलू

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

2

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

एक और बात पर विचार करना है कि मेज पर अन्य सूचकांक क्या हैं। इसका उपयोग नहीं किया जा सकता है क्योंकि यह किसी अन्य सूचकांक का अधिकतर या पूरी तरह से डुप्लिकेट है। हाँ। SQL सर्वर आपको दो अलग-अलग लेकिन समान अनुक्रमित बनाने देता है ताकि यह पूरी तरह से निरर्थक हो सके।

आप यह भी देख सकते हैं कि यदि उस इंडेक्स को हटा दिया गया था तो उस क्वेरी का उपयोग करने के लिए क्वेरी प्लान क्या हो सकता है। क्या इसका उपयोग करने के लिए एक और सूचकांक होगा या क्या यह संभव है कि एक पूर्ण टेबल स्कैन पर वापस गिर जाए।

इंडेक्स उतना ही कला के रूप में समाप्त होता है जितना कि यह विज्ञान है क्योंकि इसे चलाने के बारे में सब कुछ जानना वास्तव में कठिन है और यह वैसे भी अक्सर बदलता रहता है।

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