SQL सर्वर बेसलाइन परीक्षण के लिए चरणों की निश्चित सूची?


10

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

SQL सर्वर सेटिंग को "क्लीन" स्थिति में सेट करने की चरणों की यह सूची है?

अनुक्रम तार्किक / सही है?

क्या कोई निरर्थक कदम हैं?

CHECKPOINT              -- Write all dirty pages

DBCC DROPCLEANBUFFERS   -- All should be clean after checkpoint?

DBCC FREEPROCCACHE      -- Clear the plan cache

DBCC FREESYSTEMCACHE    -- Is this necessary after FREEPROCCACHE?

DBCC FREESESSIONCACHE   -- May not be necessary if distributed queries aren't used, but want to catch all scenarios

EXEC SP_UPDATESTATS     -- Refresh stats

'BEGIN TESTING!'

5
FYI करें, DROPCLEANBUFFERSपरीक्षण के लिए अच्छा है लेकिन हमेशा सटीक नहीं होता है। यदि आप एक उच्च-वॉल्यूम तालिका का संदर्भ दे रहे हैं, तो यह बहुत संभावना है कि आपके पास लगभग हमेशा स्मृति में पृष्ठ होंगे, और IO समय उस क्वेरी में एक बड़ा कारक नहीं होगा। आप उस मामले में यथार्थवादी होने की तुलना में IO पर अधिक भार डाल सकते हैं।
JNK

क्या आप उत्पादन वातावरण में परीक्षण या एक अलग परीक्षण वातावरण के बारे में बात कर रहे हैं?
bopapa_1979

किसी को भी, जो पर्यावरण के वातावरण में परीक्षण करता है, को निकाल दिया जाना चाहिए। :) हाँ, वातावरण का परीक्षण करें।
एरिक हिगिंस

जवाबों:


5

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

अगला, मैं सवाल करूंगा कि रन के बीच क्या बदल रहा है। उदाहरण के लिए, प्रत्येक डेटाबेस में EXEC SP_UPDATESTATS चलाकर, जैसा कि आपने सुझाव दिया है, आप अपडेट किए गए तालिकाओं के लिए आँकड़ों को फिर से भरने जा रहे हैं। हालाँकि, जब तक आप फुलस्कैन के साथ आँकड़े अपडेट नहीं कर रहे हैं, आपको तालिका से यादृच्छिक पंक्तियाँ मिल रही हैं - यह भी दोहराव योग्य नहीं है, और मुझे नहीं लगता कि आप वास्तव में ऐसा करना चाहते हैं। इसके बजाय, आप प्रत्येक रन के बीच डेटाबेस को पुनर्स्थापित करना चाह सकते हैं ताकि आप हमेशा एक ही डेटा का परीक्षण कर रहे हों। यदि आपके परीक्षण आवेषण / अपडेट / डिलीट कर रहे हैं, तो हो सकता है कि वे प्रत्येक रन पर अलग-अलग प्रदर्शन प्रोफाइल हों यदि आप डेटाबेस को पुनर्स्थापित नहीं कर रहे हैं (क्योंकि वे डेटा जोड़ रहे हैं / डेटा बदल रहे हैं, साथ ही डेटा को बदलते हैं) - और भी बदतर।


बहुत अच्छे अंक, लक्ष्य रन के बीच सब कुछ समान है। इस मामले में जो माप मैं ले रहा हूं @ हाथ एक ऐप में विशिष्ट कार्यों के लिए चलाए जाते हैं (ऐप की सूची में x सेकंड वापस करने के लिए, कतार आइटम जोड़ने के लिए y सेकंड, आदि)। परीक्षणों के बीच जो बदल रहा है वह ऐप कोड के टुकड़े हो सकते हैं और SQL ऑब्जेक्ट्स, SQL ऑब्जेक्ट्स और ऐप कोड नहीं, या उदाहरण / DB स्तर सेटिंग्स जैसे ऐप कोड में बदलाव के बिना संक्षिप्त रूप। यदि मुझे प्रत्येक परीक्षा से पहले गेट से बाहर एक पुनर्स्थापना जोड़ना था, तो आप उस बिंदु के ऊपर मेरी सूची के बारे में कैसा महसूस करते हैं? मैं कुछ भी याद कर रहा हूँ, या अनुक्रम कुछ काम की जरूरत है?
एरिक हिगिंस

ब्रेंट, क्या आप अपने परीक्षण में सीपीयू को ध्यान में रख रहे हैं?
एके

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

@AlexKuznetsov मैं वास्तव में परीक्षण करने वाला व्यक्ति नहीं हूं - एरिक वह है जिसने प्रश्न पूछा है। जब मैं इस तरह का काम करता हूं, तो मैं सीपीयू मैट्रिक्स को क्वेरी स्तर पर और साथ ही सर्वर पर देखता हूं।
ब्रेंट ओजर

हम एक तीसरे पक्ष के लोड जनरेटर का उपयोग करते हैं (और लोड परीक्षणों के विकास के लिए समर्पित एक पूर्णकालिक व्यक्ति है)। इसलिए मेरे परीक्षण उपयोगकर्ताओं के लेनदेन, अनुक्रम, # के लिए सटीक हैं, ऐप में किए गए सटीक कदम ... सब कुछ। इसलिए मुझे एसक्यूएल डैशबोर्ड टाइप मेट्रिक्स को देखने की जरूरत नहीं है। लोड परीक्षण सॉफ़्टवेयर ऐप मॉड्यूल के लिए प्रतिक्रिया समय को मिलीसेकंड पर ट्रैक करता है। तो एक DB बहाल करना एक अच्छा विचार है। मुझे यह सुनिश्चित करने की आवश्यकता है कि मैं उन अन्य चरणों की जांच करूँ जो मुझे यकीन है कि मैं पूरा कर रहा हूँ कि "क्लीन स्लेट" राज्य मैं परीक्षण के प्रत्येक दौर से पहले मांग रहा हूं।
एरिक हिगिंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.