डेटाबेस अपने आप ही अपने अनुक्रमित क्यों नहीं बनाते हैं?


32

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


3
क्या आपकी कार अपने आप ठीक हो जाती है, यह फ्लैट टायर है?
कर्मी

11
एक अधिक सटीक सादृश्य यह है कि क्या आपका ईसीयू ईंधन / तेल प्रवाह दरों को ठीक करने और गंदी लाइनों की भरपाई करने के लिए ईंधन पंप को दी जाने वाली बिजली को बदल देता है? जिसका जवाब हां में है ..
झारवुड

11
एक डेटाबेस पहले से ही एक मेज पर एक सूचकांक रख सकता है जो हमें वर्तमान में हमें इसे कमांड करने की आवश्यकता है, एक कार शारीरिक रूप से एक टायर को प्रतिस्थापित नहीं कर सकती है, जब तक कि हम इसका उपयोग करने के लिए कुछ हथियार नहीं बनाते हैं।
झारवुड

1
वे करते हैं - उन स्तंभों के लिए जिनमें UNIQUEबाधाएँ होती हैं।
dan04

8
यदि आप "सेल्फ ट्यूनिंग डेटाबेस" बनाते हैं, तो आपको इस पर काफी शोध मिलेगा। हो सकता है कि भविष्य में इसका कुछ तत्व होना आम हो।
मार्टिन स्मिथ

जवाबों:


25

अद्यतन करें

इसे अब SQL Server Azure में लागू किया गया है। यह अनुशंसाएं उत्पन्न करता है

यहाँ छवि विवरण दर्ज करें

और सूचकांक प्रबंधन को स्वचालित होने के लिए कॉन्फ़िगर किया जा सकता है

स्वचालित सूचकांक प्रबंधन सक्षम करें

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

मूल उत्तर

कुछ डेटाबेस पहले से ही (तरह का) स्वचालित रूप से अनुक्रमित बनाते हैं।

SQL सर्वर में निष्पादन योजना कभी-कभी एक सूचकांक स्पूल ऑपरेटर को शामिल कर सकती है जहां RDBMS गतिशील रूप से डेटा की एक अनुक्रमित प्रतिलिपि बनाता है। हालांकि यह स्पूल स्रोत डेटा के साथ सिंक में रखे गए डेटाबेस का एक निरंतर हिस्सा नहीं है और इसे क्वेरी निष्पादन के बीच साझा नहीं किया जा सकता है, जिसका अर्थ है कि ऐसी योजनाओं का निष्पादन एक ही डेटा पर अस्थायी इंडेक्स को बार-बार बनाने और छोड़ने का हो सकता है।

शायद भविष्य में RDBMSs में कार्यभार के अनुसार गतिशील रूप से ड्रॉप और लगातार इंडेक्स बनाने की क्षमता होगी।

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

केनेथ द्वारा उल्लिखित गायब सूचकांक डीएमवी को नेत्रहीन रूप से लागू करने का इरादा नहीं है क्योंकि वे केवल एक विशिष्ट क्वेरी के लाभों पर विचार करते हैं और संभावित सूचकांक की लागत को अन्य प्रश्नों के लिए लेने का कोई प्रयास नहीं करते हैं। न ही यह समान लापता सूचकांक को समेकित करता है। जैसे इस DMV के उत्पादन पर लापता अनुक्रमित रिपोर्ट कर सकते हैं A,B,CऔरA,B INCLUDE(C)

विचार के साथ कुछ वर्तमान मुद्दे हैं

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

समय के साथ सुधार करने के लिए लागत मॉडल की सटीकता की उम्मीद करना शायद उचित है लेकिन बिंदु 2 हल करने के लिए पेचीदा दिखता है और बिंदु 3 स्वाभाविक रूप से अघुलनशील है।

फिर भी संभवत: इंस्टॉल का विशाल बहुमत कुशल कर्मचारियों के साथ इस आदर्श स्थिति में नहीं है, जो लगातार काम की निगरानी करते हैं, निदान करते हैं, और आशा करते हैं (या कम से कम प्रतिक्रिया करते हैं) कार्यभार में परिवर्तन करते हैं।

AutoAdmin परियोजना माइक्रोसॉफ्ट रिसर्च में 1996 के बाद से चल रहा है

इस परियोजना का लक्ष्य कार्यभार के ज्ञान का दोहन करके डेटाबेस को आत्म-ट्यूनिंग और आत्म-प्रशासन करना है

प्रोजेक्ट होम पेज कई पेचीदा परियोजनाओं को सूचीबद्ध करता है। एक विशेष रूप से यहाँ प्रश्न के लिए प्रासंगिक है

एक और दिलचस्प समस्या तब उत्पन्न होती है जब कोई डीबीए उपलब्ध नहीं होता है (उदाहरण के लिए एक एम्बेडेड डेटाबेस या छोटा व्यवसाय)। ऐसे परिदृश्यों में, एक कम स्पर्श निरंतर सूचकांक ट्यूनिंग दृष्टिकोण महत्वपूर्ण हो सकता है। हमने ICDE 2007 में ... [में] " एक ऑनलाइन दृष्टिकोण शारीरिक डिजाइन ट्यूनिंग के लिए " का पता लगाया है ।

लेखक राज्य

ऑनलाइन इंडेक्स की तरह तेजी से सामान्य DBMS सुविधाओं के साथ, यह कला की स्थिति को आगे बढ़ाने वाले भौतिक डिजाइन समस्या के लिए और अधिक स्वचालित समाधान तलाशने की अपील कर रहा है।

कागज एक एल्गोरिथ्म का परिचय देता है

इसकी मुख्य विशेषताएं हैं:

  • जैसे-जैसे प्रश्नों को अनुकूलित किया जाता है, हम उम्मीदवार अनुक्रमित के एक प्रासंगिक सेट की पहचान करते हैं जो प्रदर्शन में सुधार करेगा। यह सुविधा क्वेरी प्रसंस्करण को पृष्ठभूमि में निर्मित अनुक्रमणिकाओं के समानांतर जारी रखने की अनुमति देती है।
  • निष्पादन के समय, हम संभावित bene execution t को ट्रैक करते हैं जो हम ऐसे उम्मीदवार अनुक्रमित नहीं होने से खो देते हैं और प्रश्नों, अद्यतनों और अंतरिक्ष बाधाओं की उपस्थिति में मौजूदा अनुक्रमित की उपयोगिता भी।
  • हम पर्याप्त "सबूत" इकट्ठा करने के बाद कि एक भौतिक डिजाइन परिवर्तन bene, cial है, हम स्वचालित रूप से इंडेक्स क्रिएशन या विलोपन को ट्रिगर करते हैं।
  • हमारी समस्या की ऑनलाइन प्रकृति का अर्थ है कि हम आम तौर पर भविष्य को जानने वाले इष्टतम समाधानों से पीछे रह जाएंगे। हालांकि, सावधानीपूर्वक प्रमाणों को मापने के द्वारा, हम यह सुनिश्चित करते हैं कि हम "देर से" फैसलों पर हस्ताक्षर नहीं करते हैं, इस तरह से, इस प्रकार नुकसान की मात्रा को सीमित करना

एल्गोरिथ्म का कार्यान्वयन सर्वर लोड में परिवर्तन के जवाब में थ्रॉटलिंग के लिए अनुमति देता है और अगर कार्यभार में परिवर्तन के दौरान सूचकांक सृजन को समाप्त कर सकता है और अपेक्षित लाभ इस बिंदु से नीचे आता है कि इसे सार्थक माना जाता है।

ऑनलाइन बनाम पारंपरिक शारीरिक ट्यूनिंग के विषय पर लेखकों का निष्कर्ष

इस कार्य में ऑनलाइन एल्गोरिदम उपयोगी होते हैं जब डीबीए कार्यभार के भविष्य के व्यवहार के बारे में अनिश्चित होते हैं, या व्यापक विश्लेषण या मॉडलिंग करने की कोई संभावना नहीं होती है। यदि किसी DBA के पास कार्यभार विशेषताओं के बारे में पूरी जानकारी है, तो एक स्थैतिक विश्लेषण और मौजूदा उपकरणों (जैसे, [2, 3]) द्वारा तैनाती एक बेहतर विकल्प होगा।

यहां निष्कर्ष एक अन्य पेपर ऑटोनॉमस क्वेरी द्वारा संचालित इंडेक्स ट्यूनिंग के समान हैं

यदि संपूर्ण कार्यभार पहले से ज्ञात हो तो हमारा दृष्टिकोण सूचकांक सलाहकार को हरा नहीं सकता है। हालाँकि, विकसित और बदलते वर्कलोड के साथ गतिशील वातावरण में क्वेरी द्वारा संचालित दृष्टिकोण बेहतर परिणाम देता है।


4
यह डीबीए के करियर के लिए अविश्वसनीय रूप से खतरनाक है कि उसका कौशल कभी भी स्वचालित नहीं हो सकता। यही कारण है कि नेटवर्क लोगों के करियर को अभी मार रहा है क्योंकि यह शिफ्ट सॉफ्टवेयर डिफैंटेंट के रूप में है। अच्छे DBA के रूप में हमें स्वचालन के प्रयासों का नेतृत्व करना चाहिए।
गयूस

20

सूचकांक डिजाइन जो आप जगह में रखते हैं वह एक विज्ञान की तुलना में एक कला का कुछ अधिक है। RDBMS आम वर्कलोड लेने और एक स्मार्ट इंडेक्सिंग रणनीति डिजाइन करने के लिए पर्याप्त स्मार्ट नहीं है। यह मानव हस्तक्षेप (रीड: डीबीए) पर निर्भर है कि वह कार्यभार का विश्लेषण करे और यह निर्धारित करे कि सबसे अच्छा तरीका क्या है।

यदि अनुक्रमणिका होने का कोई दंड नहीं था, तो यह अनंत संख्याओं को जोड़ने के लिए एक बन्दूक दृष्टिकोण होगा। लेकिन क्योंकि डेटा संशोधन (INSERTS, UPDATES, और DELETES) एक तालिका पर सक्षम अनुक्रमित पर प्रभाव डालते हैं, तो इन सूचकांक के चर ओवरहेड होने जा रहे हैं।

यह मानव डिजाइन और रणनीति को स्मार्टली इंडेक्स बनाने के लिए लेता है जो डेटा प्रदर्शन में अधिकतम वृद्धि करेगा, जबकि कम से कम डेटा संशोधन ओवरहेड होगा।


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
पॉल व्हाइट GoFundMonica कहते

13

वास्तव में, कुछ डेटाबेस हैं जो ऐसा करते हैं। उदाहरण के लिए, Google का बिगटेबल और अमेज़ॅन का सिंपलडीबी स्वचालित रूप से सूचकांक बनाते हैं (हालांकि न तो आरडीबीएमएस हैं) । ऐसा करने वाला कम से कम एक MySQL RDBMS इंजन भी है। SQL सर्वर उन सूचकांकों पर भी नज़र रखता है जो यह सोचते हैं कि आपको बनाना चाहिए , हालाँकि यह इतनी दूर तक नहीं जाता है जितना वास्तव में उन्हें बनाते हैं।

समस्या को सही ढंग से प्राप्त करना आश्चर्यजनक रूप से कठिन है, इसलिए यह कोई आश्चर्य नहीं है कि अधिकांश डेटाबेस स्वचालित रूप से उन्हें नहीं बनाते हैं (BigTable / SimpleDB इसके साथ दूर हो जाते हैं क्योंकि वे मनमाने ढंग से जुड़ने की अनुमति नहीं देते हैं, जिससे चीजें काफी आसान हो जाती हैं) । इसके अलावा, मक्खी पर सूचकांक बनाना एक समय लेने वाली प्रक्रिया है जिसमें संपूर्ण तालिका तक अनन्य पहुंच की आवश्यकता होती है - निश्चित रूप से ऐसा कुछ नहीं है जो आप चाहते हैं कि तालिका ऑन-लाइन हो।

हालाँकि, LAMP वेब अनुप्रयोगों की संख्या को देखते हुए, जो एमेच्योर द्वारा लिखे गए थे, जो यह भी नहीं जानते कि एक सूचकांक क्या है , मुझे अभी भी लगता है कि यह सुविधा कुछ लोगों के लिए फायदेमंद होगी।


4
मैं कहूंगा कि BigTable (और इसके व्युत्पन्न, जैसे कि Cassandra, HBase, आदि) की तुलना RDBMS समाधान से सेब की तुलना संतरे से की जा रही है - BigTable और derivates अधिक विशाल कुंजी-मूल्य या स्तंभ भंडार की तरह हैं, और पंक्ति कुंजी स्वाभाविक रूप से एक सूचकांक है ।
सुमन

1
ठीक ठीक। प्रश्न के साथ टैग किया गया है rdbmsऔर मुझे नहीं लगता कि बिगटेबल श्रेणी में आता है।
ypercube y

2
@ypercube: ... हां, मैंने अपने उत्तर में इसका उल्लेख किया है; लेकिन यह अभी भी जानने के लायक है, बहुत कम से कम रुचि के बिंदु के रूप में। मैंने कई अन्य डेटाबेस का भी उल्लेख किया है जो आरडीबीएमएस हैं जो यह करते हैं, और बताया कि यह आम क्यों नहीं है। यह निश्चित रूप से एक
पतन के

1
मैं नीचे नहीं हुआ। मैं मानता हूं कि यह बहुत कठिन समस्या है।
ypercube y

10

जबकि कुछ व्यापक उत्तर पहले से ही हैं, वे वास्तविक उत्तर के चारों ओर स्कर्ट करते हैं : अनुक्रमणिका हमेशा वांछनीय नहीं होती हैं।

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

तो हो सकता है कि आपके पास हर इन्सर्ट के लिए 1,000 रीड हों, क्यों न एक ऑटो इंडेक्स बनाया जाए? यदि तालिका विस्तृत है और क्वेरी विविध हैं, तो कई क्यों नहीं हैं? हो सकता है कि प्रतिबद्ध समय महत्वपूर्ण है और रीड्स नहीं हैं; परिस्थितियों में यह आपके डालने को धीमा करने के लिए अस्वीकार्य हो सकता है। हो सकता है कि आप सीमित डिस्क स्थान के साथ काम कर रहे हों और आप अपने द्वारा प्राप्त किए गए स्थान में अतिरिक्त इंडेक्स खाने का जोखिम नहीं उठा सकते।

मुद्दा यह है, अनुक्रमणिका स्वचालित रूप से नहीं बनाई जाती हैं क्योंकि वे सब कुछ का जवाब नहीं हैं। डिजाइनिंग इंडेक्स केवल यह कहने का मामला नहीं है कि "अरे यह मेरी रीड को गति देगा", विचार करने के लिए अन्य कारक हैं।


1
+1 जबकि यह निश्चित रूप से संभव है और इस सामान को स्वचालित करने के लिए संभव है, हम हमेशा एक सिस्टम द्वारा लागू किए गए जादू अनुक्रमों के एक समूह के साथ बेहतर बंद नहीं कर रहे हैं, जिसमें इस बात की कोई जानकारी नहीं है कि कल डेटा का उपयोग कैसे किया जाएगा, कभी भी अपने लिखने का मन न करें बनाम व्यापार-बंद दहलीज पढ़ें। मैंने दूसरे दिन इसके बारे में थोड़ा ब्लॉग किया , लेकिन स्पष्ट रूप से इसके बारे में बात करने के लिए बहुत कुछ है।
एरॉन बर्ट्रेंड

> हो सकता है कि यह समय महत्वपूर्ण हो और पढ़े-लिखे न हों; परिस्थितियों में यह आपके डालने को धीमा करने के लिए अस्वीकार्य हो सकता है। इतना अच्छा जवाब, बहुत मददगार।
सिद्धार्थ

6

वे पिछले प्रश्नों का विश्लेषण कर सकते हैं और अनुक्रमित कर सकते हैं / बना सकते हैं, लेकिन यह बेहतर ढंग से काम नहीं करता है क्योंकि अनुक्रमणिका एक संतुलन को गति देती है जो आप लागत पर अनुकूलित करना चाहते हैं और सर्वर आपके इरादों को नहीं जान सकता है।


-4

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

यदि डेटा एक-एक करके डेटाबेस में आता है, तो इसे उसी तरह अनुक्रमित किया जा सकता है। लेकिन सरल अनुक्रमण में आपके गलत परिणाम और / या धीमी गति से प्रदर्शन जल्दी या बाद में होंगे ...

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