कैश्ड टेबल रखने के लिए कितनी मेमोरी की आवश्यकता होती है?(SQL Server 2008)


5

मैं लंबे और जटिल प्रश्न चलाता हूं जो ज्यादातर एक बड़ी तालिका - 8 जीबी, 40 एम की पंक्तियों का उपयोग करते हैं।AFAIK, सभी/अधिकांश पंक्तियों का उपयोग प्रत्येक क्वेरी में किया जाता है।मैं बहुत सारे IO को एक्टिविटी मॉनिटर में देख रहा हूँ - पहली क्वेरी के लिए और हर बाद वाले के लिए।सर्वर वर्तमान में 6.5GB मेमोरी का उपयोग कर रहा है और मैं अपग्रेड करना चाहता हूं।प्रश्न यह है कि इन सभी डिस्क रीड्स से बचने के लिए कितनी मेमोरी की आवश्यकता है?यह टेबल के आकार के बॉलपार्क में है या अधिक?

यह सेट सांख्यिकी IO आउटपुट है।BigTable वह है जिसके बारे में मैं पूछ रहा हूं, SmallTable का BigTable के साथ 1-टू-कई संबंध है।#entence क्वेरी का आउटपुट (आउटपुट की कई सौ पंक्तियाँ) रखता है।

Table 'SmallTable'. Scan count 249005, logical reads 2829948, physical reads 2605, read-ahead reads 10395, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'BigTable'. Scan count 194004, logical reads 13482115, physical reads 33841, read-ahead reads 1181136, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table '#entrance__000000000023'. Scan count 0, logical reads 1568, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
+2

क्या यह सर्वर/डेटाबेस data जीबी डेटा के १ टेबल पर आपके प्रश्नों को चलाने के अलावा और कुछ नहीं करता है?मैं भी इस सवाल के 1 टेबल पर जटिल क्वेरी पहलू पर अपना सिर खरोंच रहा हूँ।डीडीएल का कोई मौका या इस जटिलता की प्रकृति में थोड़ी अंतर्दृष्टि? 14 sep. 112011-09-14 22:20:40

  0

बस एक बुनियादी जाँच, SQL सर्वर के किस संस्करण का आप उपयोग कर रहे हैं?यदि इसका उद्यम नहीं है, तो आप sql सर्वर के लिए अपनी सभी वर्तमान मेमोरी का उपयोग नहीं कर पाएंगे। 16 sep. 112011-09-16 15:30:00

  0

मैंने अंततः सर्वर की रैम को अपग्रेड किया और एक परीक्षण किया।मैंने नीचे उत्तर के रूप में परिणाम पोस्ट किए। 09 feb. 132013-02-09 08:50:11

3

आपके प्रश्नों की प्रकृति क्या है?केवल चयन करता है?या DUI (DELETE, UPDATE, INSERTs) का मिश्रण?और आपका पुनर्प्राप्ति मॉडल क्या है?क्या आप डिफ़ॉल्ट लेन-देन अलगाव स्तर का उपयोग कर रहे हैं?

यदि आप उन सभी पृष्ठों को स्मृति में रखना चाहते हैं, तो आपको अधिक मेमोरी प्राप्त करने की आवश्यकता होगी (लेकिन आप पहले से ही जानते थे)।आप 'कितना' जानना चाहते हैं, लेकिन सच्चाई यह है कि आपके प्रश्नों की प्रकृति के आधार पर आप अभी भी कुछ I/O मुद्दों को देख सकते हैं, यहां तक ​​कि पूरी तालिका को रखने के लिए पर्याप्त मेमोरी भी।

उपरोक्त सभी पर विचार करें ... हाँ, स्मृति की मात्रा के रूप में डिस्क पर तालिका का आकार ballpark।अगर आपको लगता है कि अभी भी डिस्क I/O बाद में है तो आश्चर्यचकित न हों।

  0

मैंने सर्वर रैम और "मेमोरी की मात्रा के रूप में डिस्क पर टेबल का आकार बॉलपार्क" अपग्रेड किया है, बिल्कुल सही है।मेरा जवाब नीचे देखें। 08 feb. 132013-02-08 11:59:48


8

यह दो भाग का उत्तर है।

पहला भाग उतना ही रैम खरीदें जितना आप खर्च कर सकते हैं (जब तक यह सर्वर में फिट होगा)।

दूसरा भाग यह है कि आप हमेशा डेटा पर रीड्स देखेंगे।चाल यह देखने के लिए है कि क्या वे पढ़ते भौतिक या तार्किक हैं।भौतिक पाठ डिस्क पर जा रहे हैं।मेमोरी में बफर पूल से तार्किक रीड पढ़े जाते हैं।आप SQL स्क्रिप्ट के शीर्ष पर "सेट सांख्यिकी IO ON" डालकर इसे SSMS में चलाकर देख सकते हैं।संदेशों के टैब पर आपको चलने वाली प्रत्येक क्वेरी के लिए विशिष्ट IO जानकारी मिलेगी, विशेष रूप से आपको तार्किक और भौतिक संचालन (आपके मामले में पढ़ता है) की संख्या प्राप्त होगी जो तालिका आधार पर तालिका के आधार पर हो रही है।यदि भौतिक रीड संख्या बहुत अधिक है (ये संख्याएं मूल रूप से ब्लॉक की संख्या हैं जिन्हें 8 से कई बार पढ़ा गया था तो मेग्स में नंबर पाने के लिए 1024 से विभाजित करें) और फिर आपको अधिक रैम की आवश्यकता होगी।यदि तार्किक रीड संख्या अधिक है, तो आप वास्तव में डिस्क पर नहीं जा रहे हैं, लेकिन आपकी क्वेरी को ट्यूनिंग, इंडेक्स बनाए गए आदि की आवश्यकता हो सकती है।

(नोट: इस उत्तर के प्रयोजनों के लिए, मैं केवल सेलेक्ट स्टेटमेंट मान रहा हूं। INSERT/UPDATE/DELETE संचालन कुछ अधिक जटिल हैं, लेकिन एक ही मूल बातें लागू होती हैं।)

  0

मैं कोशिश करूँगा: सांख्यिकी IO चालू करें और वापस रिपोर्ट करें।अधिक जानकारी: प्रश्न 100% चयन हैं।प्रत्येक क्वेरी में कई मिनट लगते हैं।सर्वर एक छोटा ऐप भी चलाता है जो क्वेरी करता है और डंप का परिणाम एक्सेल में होता है, लेकिन मुझे संदेह है कि इससे सर्वर का प्रदर्शन प्रभावित होता है। 15 sep. 112011-09-15 05:00:37

  0

यदि आपको आउटपुट पढ़ने में कुछ मदद चाहिए, तो निष्पादन योजना और सेट स्टैटिस्टिक्स IO आउटपुट पोस्ट करने के लिए स्वतंत्र महसूस करें। 15 sep. 112011-09-15 05:05:59


1

यकीन नहीं होता कि ज्यादा रैम यहां मदद करने वाली है।त्वरित गणना से पता चलता है कि आपकी क्वेरी 125GB डेटा के क्षेत्र में कहीं प्रसंस्करण कर रही है, 8 टेबल वाले तालिका के लिए काफी प्रभावशाली है।

(2829948 + 13482115 + 1568) x 8/1048576 = 125GB

270MB की भौतिक रीड धीमी गति से चलने वाले हिस्से के लिए होगी, लेकिन इन-मेमोरी ओवरहेड्स जितना कुछ नहीं होगा।

आप अतिरिक्त मेमोरी जोड़कर क्वेरी को फिर से काम करने से बेहतर परिणाम प्राप्त करने जा रहे हैं।एक नए प्रश्न में डीडीएल/क्वेरी/निष्पादन योजना पोस्ट करें और कोई निश्चित रूप से मदद करने में सक्षम होगा।


3

मुझे पार्टी में हमेशा देरी होती है।:) इस क्वेरी को बहुत अधिक संभावना के साथ देखा जा सकता है।लेकिन, 8 जीबी टेबल को कैश करने के लिए कितनी रैम के सवाल के लिए ... एक प्रारंभिक सवाल यह है कि सर्वर के लिए SQL सर्वर रिपोर्ट कितने मेमोरी नोड्स है?प्रत्येक मेमोरी नोड (भौतिक NUMA नोड्स के बराबर तार्किक) में एक स्वतंत्र रूप से प्रबंधित बफर पूल कैश होता है।उस नोड में प्रोसेसर पर चलने वाले कार्य उस नोड में बफर पूल में ब्लॉक सम्मिलित करते हैं।

इसलिए, यदि ऐसा कोई मौका है कि जो कार्य 8 जीबी तालिका को संपूर्णता में पढ़ेंगे, वे एकल NUMA नोड पर चलेंगे, तो नोड के बफ़र पूल में 8 GB तालिका होना आवश्यक है।तो NUMA नोड प्रति अधिकतम सर्वर मेमोरी के 8 जीबी से शुरू करें।फिर इसे बढ़ाना शुरू करते हैं।क्वेरी मेमोरी बफर पूल के 70% तक का उपभोग कर सकती है, जो डेटाबेस ब्लॉक सामग्री के लिए केवल 30% छोड़ती है।तो 8 जीबी टेबल को सर्वर के लिए एक एकल NUMA नोड पर अधिकतम सर्वर मेमोरी का 30% से अधिक नहीं होना चाहिए।अधिकतम सर्वर मेमोरी के लिए 26 2/3 जीबी।प्रति NUMA नोड।यदि इसका SQL सर्वर 2012, SQL Server 2008 R2 और पिछले के लिए बहु-पृष्ठ आबंटक (जो इस प्रकार अधिकतम सर्वर मेमोरी स्कोप के बाहर था) का उपयोग करता है, तो अब अधिकतम सर्वर मेमोरी स्कोप के भीतर है और इसका हिसाब रखना होगा।यह कुल सर्वर मेमोरी में किसी भी तरह से शामिल किया जाना है, चाहे इसका हिस्सा SQL सर्वर अधिकतम सर्वर मेमोरी सीमा हो या नहीं।

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

विंडोज ओएस (4 जीबी कम से कम) के लिए पर्याप्त मेमोरी जोड़ें।SQL सर्वर कार्यकर्ता थ्रेड्स, SQL सर्वर कोर प्रक्रिया, SQL एजेंट कार्य, किसी भी अन्य अनुप्रयोग स्मृति की आवश्यकता के लिए पर्याप्त जोड़ें।

एक NUMA नोड सर्वर पर मैं 36 जीबी रैम के बारे में अधिक से अधिक 27 जीबी कम से कम 27 जीबी के साथ 8 जीबी टेबल कैश करने के लिए लगभग 36 जीबी रैम चाहता हूं।और अगर कई NUMA नोड हैं, तो यह NUMA नोड के अनुसार अधिकतम सर्वर मेमोरी के कम से कम 26 2/3 GB की वृद्धि करेगा, साथ ही अतिरिक्त NUMA नोड्स में अतिरिक्त कोर के साथ काम करने के लिए अतिरिक्त वर्कर थ्रेड्स के लिए।

जबकि यह अत्यधिक लग सकता है, इसका कारण यह है कि SQL सर्वर NUMA को कैसे संभालता है।लेकिन आप भाग्य में हो सकते हैं!यदि एक एकल आलसी लेखक पर्याप्त होगा, तो आप NUMA को अनदेखा करने के लिए स्टार्टअप ट्रेस ध्वज 8015 का उपयोग कर सकते हैं और एकल बफर पूल का प्रबंधन कर सकते हैं।इस तरह, लगभग 36 - 40 जीबी को 8 जीबी टेबल मेमोरी-रेजिडेंट रखने के लिए पर्याप्त होना चाहिए, चाहे सर्वर पर कितने NUMA नोड हों।निम्नलिखित ब्लॉग पोस्ट में इस पर थोड़ा और चर्चा करें।यदि आप ट्रेस फ्लैग 8015 का उपयोग करने का निर्णय लेते हैं, तो मैं इसके साथ-साथ ट्रेसलॉक विवाद को रोकने के लिए ट्रेस ध्वज 8048 का मूल्यांकन करने की सलाह देता हूं और मेमोरी आवंटन से जुड़े सीएमटीटीएचएआरएडी इंतजार करता है।http://sqlsasquatch.blogspot.com/2013/02/sql-server-cache-database-working-set.html


2

मैंने 8 जीबी से 64 जीबी तक सर्वर रैम को अपग्रेड किया और एक परीक्षण किया।तालिका का आकार अब 16.05GB है और सूचकांक स्थान 187MB (1 क्लस्टर और 1 अद्वितीय अनस्टर्डर्ड इंडेक्स) है।मैंने एक क्वेरी चलाने से पहले और बाद में कुल सर्वर रैम उपयोग की जाँच की जो तालिका में 137 क्षेत्रों में से हर एक का औसत है।कुल मेमोरी 4.22GB से बढ़कर 20.4GB = 16.18GB हो गई है जो टेबल के आकार का 100.8% है।SQLRockstar यह अनुमान लगाने में बिल्कुल सही था कि रैम उपयोग की मात्रा तालिका के आकार का एक बॉलपार्क है।

और जानकारी:

  • संकुल सूचकांक की पृष्ठ परिपूर्णता 98.1% है
  • मेज पर आगे के प्रश्नों में डिस्क IO नहीं था।
  • SQL सर्वर 2008R2 डेवलपर
  • निष्पादन योजना से पता चलता है कि संकुल सूचकांक का उपयोग किया गया था