प्रश्न-पत्र टेम्पर्ड करने के लिए क्यों पैदा होते हैं?


27

पृष्ठभूमि

मैं WinSQL 2012 (64-बिट वेब संस्करण) पर चलने वाले नए सर्वर पर MSSQL 2012 (64-बिट वेब संस्करण) के साथ 64GB रैम के साथ MSSQL 2008 (मानक) पर 160gb डेटाबेस को स्थानांतरित करने की प्रक्रिया में हूँ। पुराना सर्वर लाइव और अंडर लोड है; नया सर्वर उत्पादन में नहीं है। नए सर्वर में 8 tempdb फाइलें (प्रत्येक 4GB) हैं।

संकट

नए सर्वर पर परीक्षण में, मैं कई प्रश्नों के चरणों को देख रहा हूं क्योंकि "ऑपरेटर द्वारा निष्पादन के दौरान डेटा को फैलाने के लिए उपयोग किया जाने वाला टेंपर्ड" का उल्लेख करने वाले अलर्ट हैं। मैं कुछ प्रश्नों को फिर से लिखकर छांटने में सक्षम रहा हूं, लेकिन यह वास्तव में इस मुद्दे को संबोधित नहीं कर रहा है। पुराने सर्वर पर समान क्वेरी स्पिल का कारण नहीं है। मैंने पढ़ा है कि spills तब होती है जब MSSQL मेमोरी में एक ऑपरेशन को पूरा नहीं कर सकता है और उसे tempdb में फैल / पेज करना पड़ता है। क्या मुझे फैल के बारे में चिंतित होना चाहिए?

उदाहरण

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

मैंने डेटाबेस पर sp_updatestats चलाया है, इसलिए आँकड़े अद्यतित होने चाहिए, लेकिन आप ध्यान देंगे कि पंक्तियों की अनुमानित और वास्तविक संख्या के बीच कुछ विसंगतियां हैं।

याददाश्त की चिंता

मैंने 64GB में से 58 के MSSQL के लिए अधिकतम मेमोरी सेटिंग की है। वर्तमान में MSSQL ने इस मेमोरी के लगभग 35gb का उपभोग किया है, लेकिन इसमें केवल 682mb का वर्किंग सेट है। पुराने सर्वर (उत्पादन में, भार को संभालने के लिए) में 44GB मेमोरी है जो MSSQL के लिए प्रतिबद्ध है, जिसमें से 43.5gb इसके काम करने के सेट में है।

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

मुझे नहीं पता कि क्या स्पिल्स मेमोरी सेटिंग से संबंधित हो सकती हैं - किसी के पास कोई विचार है? MSSQL के पास वर्तमान में एकड़ के लिए RAM है, इसलिए यह कुछ प्रकार और हैश मैचों के लिए tempdb में क्यों फैल रहा है?


7
2012 में निष्पादन योजना में सतर्कता नई है। क्या आपने जाँच की है कि यह पुराने सर्वर पर सभी जगह नहीं है? क्या आप इसके लिए निगरानी कर रहे थे?
मार्टिन स्मिथ

@MartinSmith आह, एहसास नहीं था कि अलर्ट नया था। मैं पुराने सर्वर पर फैल के लिए निगरानी नहीं कर रहा था। उसकी जांच करेंगे।

1
थोड़ा स्पर्शरेखा बिंदु लेकिन मैं 10 टेबल के सामने बैठा हूं जो कि डिफ़ॉल्ट रूप से ज्यादातर मर्ज जॉइन का उपयोग करता है जो बहुत अच्छी पंक्ति के अनुमानों के साथ होता है जो टेम्पर्ड लेवल 0 फैल और रनटाइम 25s का कारण बनता है। जबरदस्ती हैश ज्वाइन (और ऑर्डर) करता है और स्पल्स निकालता है और 9s में चलता है। मैं सोच रहा था कि क्या इसके मर्ज बनाम हैश या स्पिल में अंतर है और क्या ऑप्टिमाइज़र उचित रूप से ज्ञात आगामी स्पिल के प्रभाव को ठीक से भारित कर रहा है (क्योंकि पंक्ति अनुमान बहुत अच्छे हैं)।
क्रोकेक

नए सर्वर में हार्डवेयर सुमा है?
स्टैसिलैरै

जवाबों:


28

यहाँ कई अलग-अलग प्रश्न हैं:

प्रश्न: प्रश्न पहले क्यों नहीं दिए गए थे?

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

प्रश्न: डिस्क पर प्रश्न क्यों फैलते हैं?

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

प्रश्न: मैं स्पिल को कैसे कम कर सकता हूं?

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

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