SQL सर्वर एक प्रदर्शन तुलना चलाने से पहले कैश साफ़ करने के लिए आदेश देता है


46

दो अलग-अलग प्रश्नों के निष्पादन समय की तुलना करते समय, कैश को साफ़ करना महत्वपूर्ण है ताकि यह सुनिश्चित किया जा सके कि पहली क्वेरी का निष्पादन दूसरे के प्रदर्शन में परिवर्तन न करे।

Google खोज में, मुझे ये आदेश मिल सकते हैं:

DBCC FREESYSTEMCACHE
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE

वास्तव में, मेरी क्वेरी पहले की तुलना में कई निष्पादन के बाद पूरा करने के लिए अधिक यथार्थवादी समय ले रही है। हालाँकि, मुझे यकीन नहीं है कि यह अनुशंसित तकनीक है।

सबसे अच्छा अभ्यास क्या है?

जवाबों:


44

व्यक्तिगत रूप से, एक सामान्य क्वेरी के लिए 2 और बाद के निष्पादन अधिक मायने रखते हैं।

क्या आप डिस्क IO या क्वेरी प्रदर्शन का परीक्षण कर रहे हैं?

मान लें कि आपकी क्वेरी अक्सर चलती है और महत्वपूर्ण है, तो आप इसे वास्तविक जीवन की परिस्थितियों में मापना चाहते हैं। और आप हर बार सर्वर कैश को साफ नहीं करना चाहते ...

अगर आप चाहते हैं तो आप कर सकते हैं:

  • DBCC DROPCLEANBUFFERSबफ़र पूल से साफ (अनमॉडिफाइड) पेजों को साफ करता है
    कि CHECKPOINTपहले किसी भी गंदे पेज को फ्लश करने के लिए
  • DBCC FLUSHPROCINDB उस डेटाबेस के लिए निष्पादन योजनाओं को साफ करता है

यह भी देखें (DBA.SE पर)


3
चलाते समय एक त्रुटि मिली DBCC FLUSHPROCINDB: DBCC स्टेटमेंट में गलत मापदंडों की संख्या दी गई थी।
Xin

अंत में यह पाया: DECLARE @myDb AS INT = DB_ID(); DBCC FLUSHPROCINDB(@myDb); GOयहां से: stackoverflow.com/questions/7962789/...
हंस Vonn

14

देर से जवाब लेकिन अन्य पाठकों के लिए उपयोग हो सकता है

DBCC DROPCLEANBUFFERS अक्सर क्वेरी परीक्षण गति के परीक्षण और गेजिंग के लिए उपयोग की जाने वाली कमांड है। यह कमांड (जब रन) केवल गंदे पन्नों को पीछे छोड़ती है, जो वास्तव में डेटा का एक छोटा हिस्सा है। यह एक पूरे सर्वर के लिए सभी साफ पृष्ठों को निकालता है।

सलाह दी जाती है कि यह आदेश उत्पादन वातावरण पर नहीं चलाया जाना चाहिए । इस कमांड को चलाने से ज्यादातर खाली बफर कैश मिलेगा। DBCC DROPCLEANBUFFERS कमांड को निष्पादित करने के बाद किसी भी क्वेरी को चलाने से, डेटा को कैश में वापस लाने के लिए भौतिक रीड्स का उपयोग किया जाएगा, जो कि मेमोरी की तुलना में बहुत धीमा होने की संभावना है।

फिर से, इस आदेश को DBCC FREEPROCCACHE के समान समझें - इसे किसी भी प्रोडक्शन सर्वर पर नहीं चलाया जाना चाहिए जब तक कि आप पूरी तरह से नहीं जानते कि आप क्या कर रहे हैं।

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

और अधिक जानें: http://www.sqlshack.com/insight-into-the-sql-server-buffer-city/


9

मुझे हमेशा उपयोग करने के लिए कहा गया था:

dbcc dropcleanbuffers;

से MSDN :

DBCC DROPCLEANBUFFERS का उपयोग सर्वर को फिर से बंद और पुनः आरंभ किए बिना कोल्ड बफर कैश के साथ प्रश्नों का परीक्षण करने के लिए करें।

बफर पूल से साफ बफ़र्स को छोड़ने के लिए, पहले कोल्ड बफर कैश का उत्पादन करने के लिए CHECKPOINT का उपयोग करें। यह वर्तमान डेटाबेस के सभी गंदे पृष्ठों को डिस्क में लिखे जाने और बफ़र्स को साफ़ करने के लिए मजबूर करता है। ऐसा करने के बाद, आप बफ़र पूल से सभी बफ़र्स को निकालने के लिए DBCC DROPCLEANBUFFERS आदेश जारी कर सकते हैं।


2
प्लस: DBCC FREEPROCCACHEकिसी भी कैश्ड एक्जीक्यूशन प्लान को क्लियर करने के लिए ...
marc_s

1
केवल अगर आप IO का परीक्षण करना चाहते हैं, तो निश्चित रूप से ...
gbn

3

अन्य उत्तर नहीं चलने के कारणों के बारे में सही हैं DBCC FREEPROCCACHE। हालाँकि, ऐसा करने के कुछ कारण भी हैं:

  1. संगति

यदि आप दो अलग-अलग प्रश्नों या प्रक्रियाओं की तुलना करना चाहते हैं, जो अलग-अलग तरीकों से एक ही काम करने का प्रयास कर रहे हैं, तो वे एक ही पृष्ठ से टकरा सकते हैं। यदि आप क्वेरी # 1 तो क्वेरी # 2 चलाते हैं, तो दूसरा केवल बहुत तेजी से हो सकता है क्योंकि उन पृष्ठों को पहले क्वेरी द्वारा कैश किया गया था। यदि आप प्रत्येक निष्पादन से पहले कैश को साफ़ करते हैं, तो वे एक समान स्तर पर शुरू होते हैं।

यदि आप हॉट-कैश प्रदर्शन का परीक्षण करना चाहते हैं, तो कई बार प्रश्नों को चलाना सुनिश्चित करें, बारी-बारी से और पहले जोड़े को छोड़ दें। परिणाम औसत।

  1. सबसे खराब मामला

मान लें कि आपके पास एक क्वेरी है जो एक हॉट कैश के खिलाफ एक सेकंड लेती है, लेकिन एक मिनट के लिए एक ठंडा कैश। एक ऑप्टिमाइज़ेशन जो इन-मेमोरी क्वेरी को 20% धीमा बनाता है, लेकिन IO- बाउंड क्वेरी 20% तेज़ी से बड़ी जीत हो सकती है: सामान्य ऑपरेशन के दौरान, कोई भी सामान्य परिस्थितियों में अतिरिक्त 200 ms को नोटिस नहीं करेगा, लेकिन अगर कोई क्वेरी को बाध्य करता है डिस्क के खिलाफ चलाने, 60 के बजाय 48 सेकंड लेने से बिक्री बच सकती है।

यह मेमोरी के दस गीगाबाइट्स और अपेक्षाकृत तेजी से सैन और एसएसडी स्टोरेज के साथ आधुनिक सिस्टम पर चिंता का कम है, लेकिन यह अभी भी मायने रखता है। यदि कुछ विश्लेषक आपके OLTP डेटाबेस के खिलाफ एक विशाल टेबल स्कैन क्वेरी चलाता है, जो आपके बफर कैश के आधे हिस्से को मिटा देता है, तो स्टोरेज-कुशल क्वेरी आपको जल्द ही वापस मिल जाएगी।

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