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

सांख्यिकी के लिए अद्यतन

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

नोट:यह पोस्ट SQL सर्वर 2012 और उच्चतर पर सबसे अधिक लागू है, लेकिन पूर्व रिलीज़ के लिए कुछ विवरण संदर्भ (और मज़ेदार) के लिए शामिल हैं।

एसक्यूएल सर्वर 7.0

  • हिस्टोग्राम में चरणों की संख्या 300 तक सीमित है। SQL सर्वर 6.5 और पहले के हिस्टोग्राम में कुंजी में पहले कॉलम के आकार के आधार पर 2K पृष्ठ पर फिट होने वाले चरणों की संख्या होगी।
  • 'स्वचालित रूप से अद्यतन आँकड़े' डेटाबेस विकल्प पेश किया गया है; पहले के आंकड़े केवल मैन्युअल रूप से अपडेट किए जाते थे।

एसक्यूएल सर्वर 2000

  • हिस्टोग्राम में चरणों की संख्या 300 से घटाकर 200 कर दी गई है (तकनीकी रूप से 201, यदि आप NULL के लिए चरण शामिल करते हैं, तो मान लें कि कुंजी में पहला कॉलम NULLs की अनुमति देता है)।

एसक्यूएल सर्वर 2005

  • FULLSCAN का उपयोग करने वाले आंकड़ों के अपडेट समानांतर में चल सकते हैं।
  • ट्रेस फ़्लैग्स 2389 और 2390 को SP1 में पोस्ट में वर्णित आरोही कुंजी समस्या, आरोही कुंजियाँ और स्वतः त्वरित सुधार सांख्यिकी में सहायता के लिए पेश किया गया है। इस परिदृश्य का एक विस्तृत उदाहरण मेरी पोस्ट ट्रेस फ्लैग 2389 और नए कार्डिनैलिटी अनुमानक में दिया गया है।
  • उदाहरण विकल्प 'स्वचालित रूप से सांख्यिकी को अतुल्यकालिक रूप से अपडेट करें' पेश किया गया है। ध्यान दें कि इसके प्रभावी होने के लिए, 'ऑटोमैटिकली अपडेट स्टैटिस्टिक्स' विकल्प भी सक्षम होना चाहिए। यदि आप इस विकल्प के बारे में स्पष्ट नहीं हैं, तो वैकल्पिक डेटाबेस सेट विकल्पों में दस्तावेज़ीकरण की समीक्षा करें। यह एक सेटिंग है जिसकी ग्लेन अनुशंसा करते हैं (जैसा कि नीचे संदर्भित उनकी पोस्ट में उल्लेख किया गया है), लेकिन मुझे लगता है कि संभावित मुद्दों से अवगत होना महत्वपूर्ण है, जैसा कि सांख्यिकी में स्वचालित अपडेट क्वेरी प्रदर्शन को कैसे प्रभावित कर सकता है।

    नोट: SQL Server 2008 में SQL Server 2012 के माध्यम से इस सेटिंग से संबंधित स्मृति रिसाव है; अधिक जानकारी के लिए कृपया ग्लेन की पोस्ट SQL Server 2008 के लिए महत्वपूर्ण हॉटफिक्स देखें।

एसक्यूएल सर्वर 2008

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

एसक्यूएल सर्वर 2008R2 SP1

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

एसक्यूएल सर्वर 2008R2 SP2

  • फ़ंक्शन sys.dm_db_stats_properties शामिल है, जो DBCC SHOW_STATISTICS के हेडर में पाई जाने वाली समान जानकारी प्रदान करता है, साथ ही एक संशोधन कॉलम भी प्रदान करता है जिसका उपयोग परिवर्तनों को ट्रैक करने और प्रोग्रामेटिक रूप से निर्धारित करने के लिए किया जा सकता है कि क्या अपडेट की आवश्यकता है। आंकड़ों को अपडेट करने के लिए नौकरी का उपयोग करने के लिए मेरी प्राथमिकता याद है? इस डीएमएफ के साथ वह नौकरी अभी बहुत अधिक स्मार्ट हो गई है ... अब मैं देख सकता हूं कि कितना डेटा संशोधित किया गया है और केवल आंकड़ों का एक निश्चित प्रतिशत बदल गया है तो आंकड़े अपडेट करें। चालाक।

एसक्यूएल सर्वर 2012

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

एसक्यूएल सर्वर 2012 SP1

  • DBCC SHOW_STATISTICS को केवल चयन अनुमति की आवश्यकता होती है - पहले इसके लिए उपयोगकर्ता को sysadmin का सदस्य, या db_owner या db_ddladmin डेटाबेस भूमिका का सदस्य होना आवश्यक था। इसे ट्रेस फ्लैग 9485 के साथ विश्व स्तर पर अक्षम किया जा सकता है।
  • sys.dm_db_stats_properties शामिल है (ऊपर 2008R2 SP2 नोट देखें)

एसक्यूएल सर्वर 2012 SP2

  • संचयी अद्यतन 1 आरोही कुंजियों से संबंधित एक सुधार का परिचय देता है जिसे ट्रेस फ़्लैग 2389 और 2390 उपयोग में होने पर भी ठीक से पहचाना नहीं जा रहा है। इसके लिए CU1 के अलावा ट्रेस फ्लैग 4139 की आवश्यकता है, जैसा कि KB 2952101 में बताया गया है।

एसक्यूएल सर्वर 2014

  • नया कार्डिनैलिटी एस्टिमेटर पेश किया गया है, जिसे डेटाबेस संगतता मोड को 120 पर सेट करके या ट्रेस फ्लैग 2312 का उपयोग करके कार्यान्वित किया गया है। यदि आपने नए सीई के बारे में कुछ भी नहीं पढ़ा है तो मैं कार्डिनैलिटी एस्टीमेशन दस्तावेज़ीकरण से शुरू करने और फिर जो पढ़ने की सलाह देता हूं। सैक का श्वेतपत्र, एसक्यूएल सर्वर 2014 कार्डिनैलिटी एस्टिमेटर के साथ आपकी क्वेरी योजनाओं का अनुकूलन, गहन विवरण के लिए।
  • आरोही कुंजियों के लिए ट्रेस फ्लैग्स 2389 और 2390 से व्यवहार अब डेटाबेस संगतता मोड के माध्यम से लागू किया गया है। यदि आपका डेटाबेस संगतता मोड 120 (या बाद के रिलीज़ में उच्चतर) पर सेट है, तो आपको आरोही कुंजियों वाले आँकड़ों की पहचान करने के लिए SQL सर्वर के लिए ट्रेस फ़्लैग्स 2389 और 2390 का उपयोग करने की आवश्यकता नहीं है।
  • विभाजन के लिए वृद्धिशील आँकड़े प्रस्तुत किए जाते हैं, और इन्हें नए DMF sys.dm_db_incremental_stats_properties के माध्यम से देखा जा सकता है। वृद्धिशील आँकड़े किसी विभाजन के आँकड़ों को संपूर्ण तालिका के लिए अद्यतन किए बिना अद्यतन करने का एक तरीका प्रदान करते हैं। हालाँकि, वृद्धिशील आँकड़ों से अतिरिक्त आँकड़े जानकारी का उपयोग क्वेरी ऑप्टिमाइज़र द्वारा नहीं किया जाता है, लेकिन इसे तालिका के लिए मुख्य हिस्टोग्राम में बदल दिया जाता है।
  • CU2 में SQL सर्वर 2012 SP2 के लिए ऊपर उल्लिखित वही फ़िक्स शामिल है जिसके लिए ट्रेस फ़्लैग 4139 की भी आवश्यकता होती है।

एसक्यूएल सर्वर 2014 SP1

  • ट्रेस फ्लैग 7471 CU6 में वापस पोर्ट किया गया है, मूल रूप से SQL सर्वर 2016 में उपलब्ध है जैसा कि नीचे बताया गया है।

एसक्यूएल सर्वर 2016

  • यदि डेटाबेस संगतता मोड 130 पर सेट है, तो आंकड़ों के स्वत:अद्यतन के लिए थ्रेशोल्ड को कम करने के लिए ट्रेस ध्वज 2371 की अब आवश्यकता नहीं है। SQL सर्वर में ऑटोस्टेट (AUTO_UPDATE_STATISTICS) व्यवहार को नियंत्रित करना देखें।
  • न केवल FULLSCAN, बल्कि SAMPLE का उपयोग करते समय आंकड़ों के अपडेट समानांतर में चल सकते हैं। यह संगतता मोड से जुड़ा हुआ है (130 होना चाहिए), लेकिन संभावित रूप से तेज़ अपडेट प्रदान कर सकता है और इस प्रकार रखरखाव विंडो को कम कर सकता है। आरोन बर्ट्रेंड ने अपनी पोस्ट में इस वृद्धि के बारे में बात की, सांख्यिकी अपडेट के लिए संभावित सुधार:MAXDOP।
  • ट्रेस फ़्लैग 7471 को CU1 में पेश किया गया है ताकि एक ही टेबल के लिए कई अद्यतन सांख्यिकी कमांड एक साथ चल सकें और जोनाथन कुछ बेहतरीन उदाहरण प्रदान करता है कि इसका उपयोग कैसे किया जा सकता है समानांतर सांख्यिकी पुनर्निर्माण के लिए बेहतर समर्थन।

एसक्यूएल सर्वर 2016 SP1

  • प्रश्न संकेत विकल्प ENABLE_HIST_AMENDMENT_FOR_ASC_KEYS, FOR HINT तर्क के साथ प्रस्तुत किया गया है, जो ट्रेस फ़्लैग 4139 के बराबर है।
  • DMF sys.dm_db_stats_histogram CU2 में प्रदर्शित होता है, जो DBCC SHOW_STATISTICS से हिस्टोग्राम आउटपुट का एक विकल्प है। दोनों में जानकारी समान है, जो आपके लिए आसान है उसका उपयोग करें या उस समस्या के लिए बेहतर है जिसे आपको हल करने की आवश्यकता है।
  • विकल्प PERSIST_SAMPLE_PERCENT को CU4 में पेश किया गया है, जिसका उपयोग हर बार किसी आंकड़े के अद्यतन होने पर उसी नमूना दर का उपयोग करने के लिए बाध्य करने के लिए किया जा सकता है, और इस व्यवहार के उदाहरण पोस्ट में पाए जा सकते हैं, स्थायी सांख्यिकी नमूनाकरण दर।

एसक्यूएल सर्वर 2017

  • PERSIST_SAMPLE_PERCENT विकल्प CU1 में उपलब्ध है (अतिरिक्त जानकारी के लिए 2016 SP1 प्रविष्टि देखें)।
  • StatsInfoType और OptimizerStatsUsageType विशेषताएँ क्वेरी प्लान में जोड़ी जाती हैं, जो क्वेरी ऑप्टिमाइज़ेशन के दौरान उपयोग किए गए आँकड़ों को सूचीबद्ध करती है। यह CU3 में उपलब्ध है और CE संस्करण (120 और उच्चतर) से जुड़ा है। यह बहुत अच्छा है! मुझे अभी तक इसके साथ खेलने का मौका नहीं मिला है, लेकिन पहले यह जानकारी प्राप्त करने के लिए आपको अनिर्दिष्ट ट्रेस फ़्लैग का उपयोग करना होगा।
  • CU3 ने क्रिएट स्टेटिस्टिक्स और अपडेट स्टैटिस्टिक्स के लिए MAXDOP विकल्प भी पेश किया, जिसका उपयोग इंस्टेंस या डेटाबेस के लिए MAXDOP मान को ओवरराइड करने के लिए किया जा सकता है।
  • CU3 में एक और अतिरिक्त:UdfCpuTime और UdfElapsedTime विशेषताएँ क्वेरी योजना में पाई जा सकती हैं, जो अदिश-मूल्यवान, UDFs के लिए निष्पादन आँकड़ों का प्रतिनिधित्व करती हैं।

सारांश

यदि आप किसी नई रिलीज़ में अपग्रेड करना चाहते हैं, या यदि आपने हाल ही में अपग्रेड किया है, तो ध्यान दें कि ये परिवर्तन आपके समाधान को कैसे प्रभावित करते हैं। 2005/2008/2008R2 से 2014 या 2016 में अपग्रेड करने के बाद, प्रदर्शन समस्याओं की शिकायत करने के बाद हमारे कई क्लाइंट हमसे संपर्क कर चुके हैं। कई मामलों में, उन्नयन से पहले पर्याप्त परीक्षण पूरा नहीं किया गया था।

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

हम केवल अपग्रेड प्रक्रिया का परीक्षण नहीं करते हैं, हम परीक्षण करते हैं कि अपग्रेड के बाद सिस्टम कैसा दिखता है। क्या पुराने वातावरण से समान ट्रेस झंडे नए में आवश्यक हैं? किन डेटाबेस सेटिंग्स को समायोजित करने की आवश्यकता है? क्या क्वेरी का प्रदर्शन बदलता है - बेहतर या बदतर के लिए? यदि आप उत्पादन को अपग्रेड करने से पहले उन सवालों के जवाब नहीं जानते हैं, तो आप खुद को एक से कई दिनों तक अग्निशमन, सेव 1 कॉल, अपने डेस्क पर भोजन, पर्याप्त नींद नहीं लेने के लिए तैयार कर रहे हैं और कौन जानता है कि और क्या है .

नई सुविधाओं के प्रभाव और ऊपर सूचीबद्ध कार्यक्षमता में परिवर्तन को समझने के लिए समय निकालें, अपग्रेड की योजना बनाएं, और यथासंभव परीक्षण करें।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL केस:3 कम ज्ञात परेशानियों को जानें और उनसे बचें

  2. कर्सर विकल्पों पर अनुवर्ती कार्रवाई

  3. पायथन के साथ SQL इंजेक्शन हमलों को रोकना

  4. मूवी थियेटर आरक्षण प्रणाली के लिए डेटाबेस मॉडल कैसे डिज़ाइन करें

  5. टकराव के बिना यादृच्छिक पूर्णांक उत्पन्न करें