2009-04-17 15 views
7

में पाठ से निष्पादित एक ही क्वेरी से अधिक चलाने के लिए अधिक (लंबी) लंबी लगती है तो यहां एक अजीब बात है ... मेरे पास एक संग्रहित प्रो है जो चलाने के लिए 40 सेकंड लगती है। मैं संग्रहीत प्रो की सामग्री को एक नई क्वेरी विंडो में कॉपी करता हूं, 2 इनपुट पैरामीटर (जो दोनों तिथियां हैं) को बदलें ताकि वे घोषित और सेट हो जाएं और क्वेरी चला सकें। यह मूल रूप से तत्काल है, उप 1 दूसरा निष्पादन। एकमात्र अंतर यह है कि संग्रहीत प्रो 2 पैरामीटर मानकों के रूप में लेता है।एसक्यूएल सर्वर संग्रहीत प्रक्रिया प्रबंधन स्टूडियो

किसी को भी यह पता चला कि ऐसा क्या हो सकता है?

(मैं SQL सर्वर 2005 चला रहा हूँ)

+0

btw, मैं रखता के लिए proc अंकन की कोशिश की है, यह कोई प्रभाव नहीं पड़ा –

+0

http://www.sommarskog.se /query-plan-mysteries.html – Greg

उत्तर

13

Recompilation मापदंडों sniffs, इसलिए यह कोई फर्क कर सकते हैं।

This article explains my statement ...

... पैरामीटर मान संकलन या रखता दौरान सूंघा कर रहे हैं ...

आप मापदंडों मुखौटा की जरूरत है:

ALTER PROCEDURE [uspFoo] 
    @Date1 datetime, 
    @Date2 datetime 
AS 
BEGIN 
    DECLARE @IDate1 datetime, @IDate2 datetime; 
    SELECT @IDate1 = @Date1, @IDate2 = @Date2; 
    -- Stuff here that depends on @IDate1 and @IDate2 
END 
+0

ने अभी इसे स्वयं से बाहर किया है, लेकिन आप सही हैं :) –

+1

+1 मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन आपने मुझे अभी इसे काम करने की कोशिश की है! – twoleggedhorse

1

भागो प्रोफाइलर और निष्पादन के लिए क्वेरी योजनाओं को कैप्चर करें। यह देखने के लिए जांचें कि अंतर क्या हैं - आप क्वेरी को ट्यून करने या किसी विशेष योजना को बल देने में सक्षम हो सकते हैं।

1

मेरे पास एक समान समस्या थी और पाया गया कि यह एक कारण के रूप में पैरामीटर स्थापित कर रहा था, लेकिन WHERE खंड में जिस कॉलम की तुलना की जा रही थी, उसमें कॉलम DATETIME में था, इसलिए ऐसा था कि एसएसएमएस डेटा प्रकार को परिवर्तित कर रहा था हर पंक्ति की तुलना कर रहा था। पैरामीटर डेटा प्रकार को DATETIME में बदलना या उपरोक्त वर्णित पैरामीटर को मास्क करना समस्या को हल करता है।

4

जैसा कि जीबीएन कहते हैं, यह एक पैरामीटर मुद्दा स्नीफिंग है। उनके सुझाव के लिए एक वैकल्पिक तरीका आपकी क्वेरी के अंत में निम्नलिखित पंक्ति शामिल करने के लिए है:

OPTION (RECOMPILE) 
संबंधित मुद्दे