मुझे एक विषम स्थिति का सामना करना पड़ा जहां OPTION (RECOMPILE)
मेरी क्वेरी के लिए अपील करने के कारण यह आधे से एक सेकंड में चलती है, जबकि इसे छोड़ने से क्वेरी पांच मिनट तक अच्छी तरह से चलती है।
यह वह स्थिति है जब क्वेरी क्वेरी एनालाइज़र से या मेरे C # प्रोग्राम के माध्यम से निष्पादित की जाती है SqlCommand.ExecuteReader()
। कॉल करना (या कॉल नहीं करना) DBCC FREEPROCCACHE
या DBCC dropcleanbuffers
कोई फर्क नहीं पड़ता; क्वेरी परिणाम हमेशा तुरंत OPTION (RECOMPILE)
और इसके बिना पाँच मिनट से अधिक समय तक वापस आ जाते हैं । क्वेरी को हमेशा समान मापदंडों के साथ कहा जाता है [इस परीक्षण के लिए]।
मैं SQL Server 2008 का उपयोग कर रहा हूं।
मैं एसक्यूएल लिखने के साथ काफी सहज हूं, लेकिन पहले कभी भी OPTION
क्वेरी में एक कमांड का उपयोग नहीं किया है और इस मंच पर पदों को स्कैन करने तक योजना कैश की पूरी अवधारणा से अपरिचित था। पदों से मेरी समझ यह है कि OPTION (RECOMPILE)
एक महंगा ऑपरेशन है। यह स्पष्ट रूप से क्वेरी के लिए एक नई लुकअप रणनीति बनाता है। तो ऐसा क्यों है, कि बाद में आने वाले प्रश्न OPTION (RECOMPILE)
इतने धीमे हैं? क्या पिछले प्रश्नों में लुकअप रणनीति का उपयोग नहीं किया जाना चाहिए जो पिछले कॉल पर गणना की गई थी जिसमें पुनर्मूल्यांकन संकेत शामिल था?
क्या यह अत्यधिक असामान्य है कि हर एक कॉल पर एक पुनर्मूल्यांकन संकेत की आवश्यकता है?
प्रवेश-स्तर के प्रश्न के लिए क्षमा करें, लेकिन मैं वास्तव में इसके प्रमुख या पूंछ नहीं बना सकता।
अद्यतन: मुझे क्वेरी पोस्ट करने के लिए कहा गया है ...
select acctNo,min(date) earliestDate
from(
select acctNo,tradeDate as date
from datafeed_trans
where feedid=@feedID and feedDate=@feedDate
union
select acctNo,feedDate as date
from datafeed_money
where feedid=@feedID and feedDate=@feedDate
union
select acctNo,feedDate as date
from datafeed_jnl
where feedid=@feedID and feedDate=@feedDate
)t1
group by t1.acctNo
OPTION(RECOMPILE)
क्वेरी विश्लेषक से परीक्षण चलाते समय, मैं निम्नलिखित पंक्तियों को प्रस्तुत करता हूं:
declare @feedID int
select @feedID=20
declare @feedDate datetime
select @feedDate='1/2/2009'
जब इसे मेरे C # प्रोग्राम से कॉल किया जाता है, तो पैरामीटर को SqlCommand.Parameters
संपत्ति के माध्यम से पारित किया जाता है ।
इस चर्चा के प्रयोजनों के लिए, आप मान सकते हैं कि पैरामीटर कभी नहीं बदलते हैं, इसलिए हम उप-इष्टतम पैरामीटर को कारण के रूप में सूंघ कर बता सकते हैं।
X = @X OR @X IS NULL
को ढहाने X=@X
और प्रदर्शन करने के लिए मिलते हैं यहां देखें या खिड़की के कार्यों के साथ एक दृश्य के खिलाफ आगे की भविष्यवाणी करें
RECOMPILE
। किसी भी घटना में निष्पादन योजनाओं को पकड़ें और मतभेदों को देखें।