2010-10-29 12 views
5

की तुलना में काफी लंबा समय लेता है। मैं एक प्रक्रिया चला रहा हूं जो पहली बार निष्पादन के लिए लगभग 1 मिनट लेता है लेकिन अगली बार यह लगभग 9-10 सेकेंड तक कम हो जाता है। और कुछ समय बाद इसे लगभग 1 मिनट लगते हैं।एसक्यूएल क्वेरी अगले रन

मेरी प्रक्रिया एकल तालिका के साथ काम कर रही है जिसमें 6 गैर क्लस्टर और 1 क्लस्टर इंडेक्स हैं और अद्वितीय आईडी कॉलम 1,218,833 पंक्तियों के साथ अद्वितीय पहचानकर्ता डेटा प्रकार है।

क्या आप मुझे मार्गदर्शन कर सकते हैं समस्या/संभावित प्रदर्शन सुधार कहां है?

अग्रिम धन्यवाद।

यहां प्रक्रिया है।

PROCEDURE [dbo].[Proc] (
     @HLevel NVARCHAR(100), 
     @HLevelValue INT, 
     @Date DATE, 
     @Numbers NVARCHAR(MAX)=NULL 
    ) 
    AS 

    declare @LoopCount INT ,@DateLastYear DATE 


    DECLARE @Table1 TABLE (list of columns) 
    DECLARE @Table2 TABLE (list of columns) 

    -- LOOP FOR 12 MONTH DATA 
    SET @LoopCount=12 
    WHILE(@LoopCount>0) 
     BEGIN 
      SET @LoopCount= @LoopCount -1 

      -- LAST YEAR DATA 
      DECLARE @LastDate DATE; 
      SET @LastDate=DATEADD(D,-1, DATEADD(yy,-1, DATEADD(D,1,@Date))) 




        INSERT INTO @Table1 
        SELECT list of columns 
         FROM Table3 WHERE Date = @Date 
        AND 
        CASE 
         WHEN @HLevel='crieteria1' THEN col1 
         WHEN @HLevel='crieteria2' THEN col2 
         WHEN @HLevel='crieteria3' THEN col3 
        END [email protected] 



        INSERT INTO @Table2 
         SELECT list of columns 
         FROM table4 
         WHERE Date= @LastDate 
         AND (@Numbers IS NULL OR columnNumber IN (SELECT * FROM dbo.ConvertNumbersToTable(@Numbers))) 

INSERT INTO @Table1 
     SELECT list of columns 
      FROM @Table2 Prf2 WHERE Prf2.col1 IN (SELECT col2 FROM @Table1) AND Year(Date) = Year(@Date) 



    SET @Date = DATEADD(D,-1,DATEADD(m,-1, DATEADD(D,1,@Date))); 

END 

    SELECT list of columns FROM @Table1 
+0

आप निष्पादन योजना का उपयोग कर आप क्या क्वेरी के साथ क्या हो रहा है की एक विचार देने के लिए कोशिश की है? साथ ही, पहली बार यह चलने पर, यह स्मृति में निष्पादन योजना को कैश करेगा जिससे अगली बार इसे निष्पादित करने में तेज़ी हो जाएगी। –

+1

कृपया कुछ कोड दिखाएं ताकि हम देख सकें कि आप क्या कर रहे हैं। –

+0

क्या गति के लिए मैन्युअल रूप से निष्पादन योजनाओं को जोड़ने का कोई तरीका है और यह हमेशा के लिए रहेगा। – Chingi

उत्तर

10

पहली बार क्वेरी चलाता है, डेटा डेटा कैश में नहीं है और इसलिए डिस्क से प्राप्त किया गया है। इसके अलावा, इसे एक निष्पादन योजना तैयार करनी है। बाद में आप क्वेरी चलाते हैं, डेटा कैश में होगा और इसलिए इसे पढ़ने के लिए डिस्क पर जाना होगा। यह मूल रूप से उत्पन्न निष्पादन योजना का पुन: उपयोग भी कर सकता है। इसका मतलब है कि निष्पादन का समय बहुत तेज़ हो सकता है और संभवतया स्मृति में जितना अधिक डेटा कैश करने में सक्षम होने के लिए बड़ी मात्रा में रैम होना चाहिए (यह डेटा कैश है जो सबसे बड़ा प्रदर्शन सुधार प्रदान करता है)।

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

अन्य चीजें हैं जो इस तरह के क्या भार, समय में सर्वर पर है कि क्या आपकी क्वेरी अन्य प्रक्रियाओं आदि

+0

कुछ अनुमान हैं। पहले निष्पादन के बाद \\ CHECKPOINT \\ DBCC DROPCLEANBUFFERS() \\ चलाएं। यदि बाद के निष्पादन अभी भी धीमे हैं, तो AdaTheDev पर स्पॉट है। यह कैश है। तो यदि लक्ष्य सभी परिस्थितियों में जल्दी से चलाने के लिए क्वेरी प्राप्त करना है, तो अधिक जानकारी की आवश्यकता है। –

+0

मैंने प्रक्रिया को जोड़ा है। – Chingi

+1

@Chingi - प्रक्रिया के साथ आप सबसे अच्छी चीज कर सकते हैं लूप से छुटकारा पाने के लिए इसे फिर से लिखना है। यदि आप अच्छे प्रदर्शन चाहते हैं तो लूप/कर्सर को आम तौर पर टालना चाहिए। – AdaTheDev

0

ऐसा लगता है कि संग्रहीत प्रक्रिया बार-बार के बाद फिर कंपाइल है द्वारा अवरुद्ध किया जा रहा है के रूप में एक कारक हो सकता है निश्चित रूप से कर रहे हैं कुछ समय। रखता कम करने के लिए इस लेख की जाँच करें:

http://blog.sqlauthority.com/2010/02/18/sql-server-plan-recompilation-and-reduce-recompilation-performance-tuning/

संबंधित मुद्दे