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

सांख्यिकी के लिए स्वचालित अपडेट को ट्रैक करना

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

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

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

एसक्यूएल ट्रेस

यदि आप अपने परिवेश में SQL Server 2008 R2 या उससे नीचे चला रहे हैं, तो SQL ट्रेस एक ऐसा तरीका है जिसका उपयोग आप स्वचालित अपडेट कैप्चर करने के लिए कर सकते हैं। नीचे उपयोग की गई ट्रेस डेफिनिशन स्क्रिप्ट केवल ऑटो स्टैट्स इवेंट को कैप्चर करती है, जो तब पकड़ती है जब कोई आँकड़ा ऑटो-अपडेट होता है, और जब कोई आँकड़ा ऑटो-क्रिएट होता है। आपके परिवेश में इस ट्रेस के कुछ समय तक चलने के बाद, आप इसे एक तालिका में लोड कर सकते हैं और फिर आउटपुट को क्वेरी करके देख सकते हैं कि क्या अपडेट हुए। नीचे शामिल स्क्रिप्ट बेसबॉल आँकड़े नमूना डेटाबेस का उपयोग करते हुए एक उदाहरण के माध्यम से चलती है।

विस्तारित ईवेंट

यदि आप SQL Server 2012 या उच्चतर चला रहे हैं, तो मैं स्वचालित अपडेट कैप्चर करने के लिए विस्तारित ईवेंट का उपयोग करने की अनुशंसा करता हूं। SQL ट्रेस स्क्रिप्ट की तरह, शामिल सत्र परिभाषा स्क्रिप्ट केवल ऑटो आँकड़े ईवेंट को कैप्चर करती है - फिर से, ऑटो-अपडेट और ऑटो-क्रिएट दोनों। एक बार XE सत्र कुछ समय तक चलने के बाद, आप UI के माध्यम से आउटपुट को तालिका में लोड कर सकते हैं और फिर यह देखने के लिए क्वेरी कर सकते हैं कि क्या अपडेट हुए। शामिल स्क्रिप्ट पहले की तरह ही उदाहरण के माध्यम से चलती है, लेकिन इस बार डेटा एकत्र करने के लिए विस्तारित ईवेंट का उपयोग कर रही है।

sys.dm_db_stats_properties

एक तीसरा विकल्प जिस पर आप सांख्यिकी अपडेट की निगरानी के लिए विचार कर सकते हैं वह है sys.dm_db_stats_properties DMF, जो केवल SQL Server 2008 R2 SP2 और उच्चतर और SQL Server 2012 SP1 और उच्चतर में उपलब्ध है। जितना मैं इस डीएमएफ से प्यार करता हूं, यह समाधान यह सुनिश्चित करने के मामले में अधिक कठिन है कि आपने सभी डेटा पर कब्जा कर लिया है, और आउटपुट की समीक्षा करने में अधिक काम लगता है। DMF के साथ, प्रत्येक ऑटो-अपडेट को ट्रैक नहीं किया जाता है, हम केवल ट्रेंड स्टैटिस्टिक्स अपडेट जानकारी देखते हैं कि अपडेट कब होते हैं।

यह एक आसान काम है:आप आँकड़ों की जानकारी रखने के लिए एक तालिका बनाते हैं, और फिर नियमित रूप से DMF से तालिका में जानकारी का स्नैपशॉट लेते हैं। यहां कुंजी यह पता लगाना है कि डेटा को कितनी बार कैप्चर करना है। हर घंटे शायद अधिक है, दिन में एक बार पर्याप्त नहीं हो सकता है। मैं अनुशंसा करता हूं कि आप SQL एजेंट कार्य से शुरुआत करें जो हर चार घंटे में DMF डेटा को स्नैपशॉट करता है। इसे कुछ दिनों तक चलने दें, फिर अपना डेटा जांचें। यदि आंकड़े दिन में अधिकतम एक बार अपडेट हो रहे हैं, तो आप अंतराल को हर आठ या बारह घंटे तक बढ़ा सकते हैं। अगर आंकड़े हर चार घंटे में आसानी से अपडेट हो रहे हैं, तो अपने अंतराल को हर दो घंटे पर छोड़ दें - आप यह सुनिश्चित करना चाहते हैं कि आप प्रत्येक अपडेट को कैप्चर कर रहे हैं। इस कारण से, कुछ प्रणालियों के लिए, sys.dm_db_stats_properties प्रयास के लायक नहीं हो सकता है; एक XE सत्र या ट्रेस आसान हो सकता है।

एक अंतिम नमूना स्क्रिप्ट एक उदाहरण के माध्यम से चलती है कि आप sys.dm_db_stats_properties का उपयोग कैसे करेंगे आँकड़ों के अद्यतन रुझान के लिए। ध्यान रखें कि यह स्क्रिप्ट केवल एक तालिका के लिए आंकड़ों की जानकारी कैप्चर करती है। यदि आप डेटाबेस में प्रत्येक तालिका को कैप्चर करने के लिए स्क्रिप्ट को बदलते हैं, तो विश्लेषण करने के लिए बहुत अधिक डेटा होगा।

अगले चरण

नमूना स्क्रिप्ट डाउनलोड करें, और तय करें कि आंकड़ों के अपडेट को ट्रैक करने के लिए आपको किस पद्धति का उपयोग करना चाहिए।

एक बार जब आपके पास डेटा होता है जो दिखाता है कि स्वचालित अपडेट कब होते हैं, तो आपको इसे वापस ज्ञात प्रदर्शन समस्याओं से जोड़ना होगा। जैसे, यदि आप किसी प्रदर्शन मीट्रिक को ट्रैक नहीं कर रहे हैं, तो ऑटो-आंकड़े अपडेट डेटा किसी भी प्रकार के सहसंबंध में मदद नहीं करेगा। मान लें कि आपके पास किसी भी प्रदर्शन समस्या के लिए टाइमस्टैम्प है, तो आप इसकी तुलना StartTime . से कर सकते हैं और EndTime ट्रेस से, timestamp XE से, या last_updated . से sys.dm_db_stats_properties . से DMF, यह निर्धारित करने के लिए कि स्वचालित अपडेट ने सिस्टम के प्रदर्शन को प्रभावित किया है या नहीं।

यदि आप अद्यतनों और प्रदर्शन समस्याओं के बीच कोई संबंध नहीं बना सकते हैं, तो आप अद्यतनों को समस्या के कारण के रूप में खारिज कर सकते हैं, और किसी अन्य क्षेत्र पर ध्यान केंद्रित कर सकते हैं। यदि अपडेट मूल कारण हैं, तो आपके पास दो विकल्प हैं:ऑटो अपडेट सांख्यिकी विकल्प को अक्षम करें, या ऑटो अपडेट सांख्यिकी को असीमित रूप से सक्षम करें। दोनों के पक्ष और विपक्ष हैं जिन पर आपको, DBA के रूप में, विचार करना चाहिए।

स्वत:अद्यतन आंकड़े अक्षम करना

यदि आप स्वत:अद्यतन आंकड़े विकल्प को अक्षम करना चुनते हैं, तो दो सबसे महत्वपूर्ण बातें जानना आवश्यक हैं:

  1. आपको अपने आंकड़ों को रखरखाव कार्य या कस्टम नौकरी के माध्यम से बिल्कुल प्रबंधित करना होगा।
  2. जब आप SQL Server 2008 R2 और उससे नीचे के आंकड़ों को अद्यतन करते हैं, तो क्वेरी पुन:संकलित नहीं होंगी।

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

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

अतुल्यकालिक रूप से ऑटो अपडेट आंकड़े सक्षम करना

जब आप स्वत:अद्यतन सांख्यिकी एसिंक्रोनस विकल्प को सक्षम करते हैं, यदि कोई आंकड़ा अमान्य कर दिया गया है और उस आंकड़े का उपयोग करने वाली क्वेरी चलाई जाती है, तो आंकड़े को तब तक अपडेट नहीं किया जाएगा जब तक कि क्वेरी पूरी नहीं हो जाती - अपडेट एसिंक्रोनस होता है। यहाँ लाभ यह है कि अद्यतन चलाई गई क्वेरी को प्रभावित नहीं करेगा; दोष यह है कि क्वेरी मौजूदा योजना का उपयोग करेगी, जो अब इष्टतम योजना नहीं हो सकती है। योजना अभी भी इष्टतम है या नहीं यह आपके कार्यभार पर निर्भर करेगा (उदाहरण के लिए लंबे समय से चल रहे प्रश्नों के साथ एक रिपोर्टिंग कार्यभार)। एक डीबीए के रूप में, आपको इस विकल्प को सक्षम करने के पेशेवरों और विपक्षों को तौलना होगा, और यह निर्धारित करना होगा कि आपके डेटाबेस के लिए सबसे अच्छा क्या है। ध्यान दें कि यदि आप SQL Server 2008 से 2012 तक चला रहे हैं, तो इस सेटिंग के साथ एक स्मृति रिसाव संबद्ध है। Microsoft के पास संचयी अद्यतन उपलब्ध हैं जो एक समाधान प्रदान करते हैं, लेकिन यदि आपने उन्हें पहले से लागू नहीं किया है, तो आप एक और निर्णय का सामना करते हैं:CU लागू करें ताकि आप विकल्प को सक्षम कर सकें, या CU लागू न करें और सक्षम न करें विकल्प।

सारांश

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


  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. एसक्यूएल तुलना ऑपरेटर

  3. टी-एसक्यूएल में वर्तमान तिथि (बिना समय) कैसे प्राप्त करें?

  4. एसक्यूएल लेफ्ट जॉइन

  5. प्लान एक्सप्लोरर के साथ टिपिंग प्वाइंट की कल्पना करना