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

SQL सर्वर में बहुत बड़ी टेबल

ऊपर मार्क और अनकॉउन के साथ सहमत ... क्लस्टर्ड इंडेक्स में 6 इंडेक्स बहुत अधिक हैं, खासकर एक टेबल पर जिसमें केवल 14 कॉलम हैं। आपके पास 3 या 4 से अधिक नहीं होना चाहिए, यदि ऐसा है, तो मैं 1 या शायद 2 कहूंगा। आप जान सकते हैं कि क्लस्टर इंडेक्स डिस्क पर वास्तविक तालिका है, इसलिए जब कोई रिकॉर्ड डाला जाता है, तो डेटाबेस इंजन को इसे सॉर्ट करना होगा और इसे डिस्क पर इसके क्रमबद्ध व्यवस्थित स्थान पर रखें। गैर संकुल अनुक्रमणिका नहीं हैं, वे लुकअप 'टेबल' का समर्थन कर रहे हैं। मेरे VLDB को नीचे दिए गए 1 बिंदु के अनुसार डिस्क (CLUSTERED INDEX) पर रखा गया है।

  1. अपनी संकुल अनुक्रमणिका को 1 या 2 तक कम करें। सबसे अच्छा फ़ील्ड विकल्प हैं पहचान (INT), यदि आपके पास एक है, या एक दिनांक फ़ील्ड है जिसमें फ़ील्ड डेटाबेस में जोड़े जा रहे हैं, या कोई अन्य फ़ील्ड जो एक है डेटाबेस में आपका डेटा कैसे जोड़ा जा रहा है इसका प्राकृतिक प्रकार। मुद्दा यह है कि आप उस डेटा को तालिका के निचले भाग में रखने की कोशिश कर रहे हैं ... या इसे डिस्क पर सबसे अच्छे (90%+) तरीके से रखा है जिससे आप रिकॉर्ड पढ़ेंगे। यह ऐसा बनाता है कि कोई पुनर्गठन नहीं चल रहा है या यह कि डेटा को सर्वोत्तम पढ़ने के लिए सही जगह पर लाने के लिए एक और केवल एक हिट ले रहा है। हटाए गए फ़ील्ड को गैर-संकुल अनुक्रमणिका में रखना सुनिश्चित करें ताकि आप लुकअप प्रभावकारिता को न खोएं। मैंने अपने वीएलडीबी पर कभी भी 4 से अधिक फ़ील्ड नहीं डाले हैं। यदि आपके पास ऐसे फ़ील्ड हैं जिन्हें बार-बार अपडेट किया जा रहा है और वे आपके क्लस्टर इंडेक्स, OUCH में शामिल हैं, तो यह डिस्क पर रिकॉर्ड को पुनर्गठित करने वाला है और महंगा विखंडन का कारण बनता है।
  2. अपने इंडेक्स पर फिलफैक्टर की जांच करें। भरण कारक संख्या (100) जितनी बड़ी होगी, डेटा पृष्ठ और अनुक्रमणिका पृष्ठ उतने ही अधिक भरे होंगे। आपके पास कितने रिकॉर्ड हैं और आप कितने रिकॉर्ड डाल रहे हैं, इसके संबंध में आप अपने गैर-क्लस्टर इंडेक्स के फिलफैक्टर # (+ या -) को बदल देंगे ताकि रिकॉर्ड डालने पर फिल स्पेस की अनुमति मिल सके। यदि आप अपने क्लस्टर्ड इंडेक्स को अनुक्रमिक डेटा फ़ील्ड में बदलते हैं, तो यह क्लस्टर्ड इंडेक्स पर उतना मायने नहीं रखेगा। अंगूठे का नियम (आईएमओ), उच्च लिखने के लिए 60-70 फिलफैक्टर, मध्यम लिखने के लिए 70-90, और उच्च पढ़ने/कम लिखने के लिए 90-100। अपने फिलफैक्टर को 70 पर छोड़ने का मतलब होगा कि एक पृष्ठ पर प्रत्येक 100 रिकॉर्ड के लिए 70 रिकॉर्ड लिखे गए हैं, जो नए या पुनर्गठित रिकॉर्ड के लिए 30 रिकॉर्ड की खाली जगह छोड़ देंगे। अधिक जगह खाता है, लेकिन यह निश्चित रूप से हर रात डीईएफआरएजी (नीचे 4 देखें) को हरा देता है
  3. सुनिश्चित करें कि आंकड़े टेबल पर मौजूद हैं। यदि आप "sp_createstats 'indexonly'" का उपयोग करके आंकड़े बनाने के लिए डेटाबेस को स्वीप करना चाहते हैं, तो SQL सर्वर उन सभी इंडेक्स पर सभी आंकड़े तैयार करेगा जो इंजन ने आंकड़ों की आवश्यकता के रूप में जमा किया है। हालांकि 'अनुक्रमणिका' विशेषता को न छोड़ें या आप हर क्षेत्र के लिए आंकड़े जोड़ देंगे, तब यह अच्छा नहीं होगा।
  4. DBCC SHOWCONTIG का उपयोग करके तालिका/अनुक्रमणिका की जाँच करके देखें कि कौन-से अनुक्रमणिकाएँ सबसे अधिक खंडित हो रही हैं। मैं यहां विवरण में नहीं जाऊंगा, बस यह जान लें कि आपको यह करने की आवश्यकता है। फिर उस जानकारी के आधार पर, इंडेक्स में बदलाव और कितनी तेजी से (समय के साथ) बदलाव के संबंध में फिलफैक्टर को ऊपर या नीचे बदलें।
  5. एक जॉब शेड्यूल सेट करें जो अलग-अलग इंडेक्स पर ऑनलाइन (DBCC INDEXDEFRAG) या ऑफलाइन (DBCC DBREINDEX) करेगा ताकि उन्हें डीफ़्रैग किया जा सके। चेतावनी:तालिका के इतने बड़े हिस्से पर DBCC DBREINDEX को रखरखाव के समय के बिना न करें क्योंकि यह ऐप्स को नीचे लाएगा ... विशेष रूप से CLUSTERED INDEX पर। आपको चेतावनी दी गई थी। इस भाग का परीक्षण और परीक्षण करें।
  6. निष्पादन योजनाओं का उपयोग यह देखने के लिए करें कि SCANS, और FAT PIPES क्या मौजूद हैं और अनुक्रमणिका को समायोजित करें, फिर उन हॉट स्पॉट से छुटकारा पाने के लिए संग्रहीत प्रोसेस को डीफ़्रैग करें और फिर से लिखें। यदि आप अपनी निष्पादन योजना में एक लाल वस्तु देखते हैं, तो ऐसा इसलिए है क्योंकि उस क्षेत्र में आंकड़े नहीं हैं। यह बुरी बात है। यह कदम "विज्ञान से अधिक कला" है।
  7. पीक समय पर, क्वेरी इंजन को डेटा वितरण के बारे में अधिक से अधिक जानकारी देने के लिए FULLSCAN के साथ अद्यतन आँकड़े चलाएँ। अन्यथा सप्ताहांत के दौरान टेबल पर मानक अद्यतन आंकड़े (मानक 10% स्कैन के साथ) करें या अधिक बार जैसा कि आप अपने अवलोकनों के साथ फिट देखते हैं यह सुनिश्चित करने के लिए इंजन के पास डेटा वितरण के बारे में अधिक जानकारी है ताकि डेटा को कुशलतापूर्वक पुनर्प्राप्त किया जा सके।

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

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



  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 सर्वर 2014 की खोज समानांतरवाद में चुनें

  2. SQL सर्वर 2008 में CLR में थ्रेडिंग

  3. SQL सर्वर प्रबंधन स्टूडियो (SSMS) में अलग टैब में क्वेरी और परिणाम कैसे प्रदर्शित करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 15

  4. IS NULL बनाम =NULL जहाँ क्लॉज + SQL सर्वर

  5. SQL सर्वर डेटाबेस में उपयोगकर्ता-परिभाषित तालिकाओं की संख्या की गणना करने के 5 तरीके