अप्रयुक्त इंडेक्स को छोड़ना - अप्रत्याशित खतरों का आकलन करना


16

हमारे पास DMV आंकड़ों के अनुसार सैकड़ों अप्रयुक्त इंडेक्सों के साथ एक बहुत बड़ा डेटाबेस है, जो जुलाई में सर्वर के अंतिम बार रिबूट होने के बाद से जमा हो रहा है। हमारे डीबीए में से एक ने निम्नलिखित सतर्क बयान दिए, जो मेरे लिए मायने नहीं रखते:

  1. इससे पहले कि हम किसी इंडेक्स को छोड़ दें, हमें यह सुनिश्चित करने की आवश्यकता है कि क्या यह एक विशिष्टता बाधा को लागू नहीं करता है, क्योंकि क्वेरी ऑप्टिमाइज़र को इस इंडेक्स के अस्तित्व की आवश्यकता हो सकती है।
  2. जब भी कोई इंडेक्स बनाया जाता है, उस इंडेक्स से संबंधित आंकड़े SQL सर्वर में भी बनाए जाते हैं। कोई क्वेरी इंडेक्स का उपयोग नहीं कर रही हो सकती है, लेकिन वह उसके आँकड़ों का उपयोग कर रही हो सकती है। इसलिए हम एक स्थिति में भाग सकते हैं, सूचकांक छोड़ने के बाद एक विशेष क्वेरी प्रदर्शन वास्तव में खराब हो जाता है। SQL सर्वर सांख्यिकी के उपयोग के आंकड़े नहीं रखता है। यद्यपि हमारे पास "ऑटो क्रेट स्टैटिस्टिक्स" सुविधा हमारे डेटाबेस पर सक्षम है, मुझे नहीं पता है कि क्वेरी ऑप्टिमाइज़र लापता आँकड़ों को बनाने से पहले सभी मापदंडों को आंतरिक रूप से पूरा करना होगा।

# 1 के बारे में, यह मुझे लगता है कि एसक्यूएल सर्वर वास्तव में एक डालने / अद्यतन करने से पहले विशिष्टता का निर्धारण करने के लिए सूचकांक पर एक खोज करेगा, और इसलिए, सूचकांक का उपयोग नहीं होने के रूप में नहीं दिखाएगा।

# 2 के बारे में, क्या यह वास्तव में संभव है?

वैसे, जब मैं कहता हूं कि एक इंडेक्स का उपयोग नहीं किया गया है, तो मेरा मतलब है कि कोई खोज नहीं है और कोई स्कैन नहीं है।


3
मैं आपको सूचकांक को निष्क्रिय करने का सुझाव दूंगा जब आप पूरी तरह से सुनिश्चित हो जाएं कि उस सूचकांक का उपयोग वर्ष के अंत में चलने वाली रिपोर्ट में भी नहीं किया गया है।
परिजन शाह

जवाबों:


17

आपकी DBA की चिंताएँ दोनों ही मान्य हैं।

# 1 के बारे में, यह मुझे लगता है कि एसक्यूएल सर्वर वास्तव में एक डालने / अद्यतन करने से पहले विशिष्टता का निर्धारण करने के लिए सूचकांक पर एक खोज करेगा, और इसलिए, सूचकांक का उपयोग नहीं होने के रूप में नहीं दिखाएगा।

आशावादी द्वारा अद्वितीयता की गारंटी का उपयोग यह तय करने में किया जा सकता है कि सही परिणाम प्राप्त करने के लिए तार्किक परिवर्तनों या भौतिक कार्यों का उपयोग किया जा सकता है। तथ्य यह है कि ऑप्टिमाइज़र एक विशिष्टता की गारंटी पर निर्भर करता है, उदाहरण के लिए, एक एकत्रीकरण को बदलना या एक-से-कई मर्ज में से किसी एक को चुनना, सूचकांक उपयोग के आँकड़ों में परिलक्षित नहीं होगा, जब तक कि अंतिम निष्पादन योजना में सूचकांक को भौतिक रूप से एक्सेस नहीं किया जाता है। । इसलिए किसी भी अनूठे सूचकांक या बाधा को हटाने (या अक्षम) के बारे में बहुत सावधान रहना चाहिए।

# 2 के बारे में, क्या यह वास्तव में संभव है?

हां, ऑप्टिमाइज़र के लिए यह संभव है कि किसी इंडेक्स से जुड़े आँकड़ों का उपयोग अंतिम निष्पादन योजना के बिना उस सूचकांक का उपयोग करके किया जाए। 'दिलचस्प' आँकड़ों को लोड करने की प्रक्रियाएँ, कार्डिनैलिटी अनुमानों की गणना और एक तैयार निष्पादन योजना का निर्माण काफी स्वतंत्र गतिविधियाँ हैं।

अनुक्रमणिका को छोड़ने से संबद्ध अनुक्रमणिका आँकड़ों को भी हटा दिया जाएगा, जो अगली बार कथन के पुन: व्यवस्थित होने पर योजना की गुणवत्ता को प्रभावित कर सकता है। सूचकांक आँकड़ों का उपयोग कार्डिनैलिटी आकलन गणना में किया जा सकता है जो अंतिम योजना पर निर्भर करता है, यहां तक ​​कि जहां सूचकांक अंतिम योजना में भौतिक रूप से मौजूद नहीं है।

आपका DBA उसका सामान जानता है।

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

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