मुझे SQL Server 2008 R2 के विरुद्ध चल रहे एंटीटी फ्रेमवर्क (4.2) द्वारा उत्पन्न सरल SQL क्वेरी के साथ कुछ प्रमुख प्रदर्शन समस्याओं का सामना करना पड़ रहा है।इकाई फ्रेमवर्क 4.2 exec sp_executesql इंडेक्स (पैरामीटर स्नीफिंग) का उपयोग नहीं करता है
exec sp_executesql 'DYNAMIC-SQL-QUERY-HERE', @param1...
अन्य स्थितियों में बस है क्वेरी में शामिल किया हुआ प्रदान की मानकों के साथ कच्चे एसक्यूएल निष्पादित करता है: कुछ स्थितियों (लेकिन सभी नहीं) में, एफई निम्न सिंटैक्स का उपयोग करता है। जिस समस्या का सामना करना पड़ रहा है वह यह है कि sp_executesql के साथ निष्पादित प्रश्न मेरी लक्ष्य तालिकाओं पर सभी अनुक्रमणिका को अनदेखा कर रहे हैं, जिसके परिणामस्वरूप बेहद खराब प्रदर्शन करने वाली क्वेरी (एसएसएमएस में निष्पादन योजना की जांच करके पुष्टि की गई है)।
कुछ शोध के बाद, ऐसा लगता है कि समस्या 'पैरामीटर स्नीफिंग' के कारण हो सकती है। अगर मैं ऐसा जैसे विकल्प (RECOMPILE) क्वेरी संकेत संलग्न: लक्ष्य टेबल पर
exec sp_executesql 'DYNAMIC-SQL-QUERY-HERE OPTION(RECOMPILE)', @param1...
अनुक्रमित उपयोग किया जाता है और क्वेरी बहुत जल्दी निष्पादित करता है। मैंने डाटाबेस इंस्टेंस (http://support.microsoft.com/kb/980653) पर पैरामीटर स्नीफिंग (4136) को अक्षम करने के लिए उपयोग किए गए ट्रेस ध्वज पर टॉगल करने का भी प्रयास किया है, हालांकि ऐसा कोई प्रभाव नहीं दिखता था।
यह मैं कुछ सवाल के साथ छोड़ देता है:
- वहाँ वैसे भी इकाई की रूपरेखा द्वारा उत्पन्न एसक्यूएल करने के लिए विकल्प (RECOMPILE) क्वेरी संकेत संलग्न करने के लिए है?
- क्या एंटिटी फ्रेमवर्क को exec sp_executesql का उपयोग करने से रोकने के लिए वैसे भी है, और इसके बजाय बस कच्चे एसक्यूएल को चलाएं?
- क्या कोई और इस समस्या में भाग रहा है? कोई अन्य संकेत/टिप्स?
अतिरिक्त जानकारी:
- मैं SSMS के माध्यम से डेटाबेस उदाहरण पुनः आरंभ किया था, फिर भी, मैं सेवा प्रबंधन कंसोल से सेवा पुन: प्रारंभ कर देगा। निम्न सेटिंग्स
- अनुकूलन सहारा वर्कलोड के लिए है
- मूल्य: 0
- न्यूनतम: 0
- अधिकतम: 1
- value_in_use: 0 :
- Parameterization सरल (0 is_parameterization_forced) पर सेट है
- is_dynamic: 1
- is_advanced: 1
मैं भी उल्लेख करना चाहिए कि अगर मैं नीचे स्क्रिप्ट के साथ ट्रेस ध्वज 4136- सक्रिय करने के बाद सेवा प्रबंधन कंसोल के माध्यम से SQL सर्वर सेवा को पुनः आरंभ, वास्तव में ट्रेस ध्वज स्पष्ट करने के लिए प्रकट होता है ... शायद मैं इस एक करना चाहिए अलग तरीके से ...
DBCC TRACEON(4136,-1)
मैं ईएफ के बारे में कुछ भी जवाब नहीं दे सकता (क्षमा करें, इसे कभी छुआ नहीं है), लेकिन मेरे पास अन्य प्रश्न हैं जिन्हें आपको अपने प्रश्न में जवाब देना चाहिए: क्या आपने ट्रेस ध्वज सेट करने के बाद सेवा को पुनरारंभ किया था? पैरामीटर के लिए डेटाबेस स्तर पर आपकी सेटिंग क्या है (सरल या मजबूर - देखें 'sys.databases.is_parameterization_forced')? "विज्ञापन कार्य वर्कलोड के लिए अनुकूलित करें" के लिए sp_configure सेटिंग क्या है? दुर्भाग्यवश, अगर मुझे सही याद है, तो ईएफ बॉक्स से बाहर एनफू 'और एनब्लैट' जैसे पैरामीटर के लिए दो अलग-अलग योजनाएं उत्पन्न करेंगे - क्योंकि वे अलग-अलग लंबाई हैं। –
देरी प्रतिक्रिया के लिए मेरी माफ़ी, और त्वरित टिप्पणी के लिए धन्यवाद! मैंने मूल पोस्ट में अतिरिक्त जानकारी जोड़ दी है। – mindlessgoods
तो मैं आपके परीक्षणों को दोबारा कोशिश करूँगा (ए) पैरामीटरकरण को मजबूर करने के लिए सेट (बी) विज्ञापन वर्कलोड के लिए ऑप्टिमाइज़ 1 और (सी) दोनों पर सेट करें। यह काफी संभावना है कि (बी) इस परिदृश्य में मदद करेगा लेकिन (ए) भी मदद कर सकता है। मैं कबूल करूंगा कि मैंने (ए) के साथ बहुत अधिक परीक्षण नहीं किया है, लेकिन (बी) ने हर विज्ञापन को वर्कलोड में मदद की है जिसे मैंने कभी भी कोशिश की है। –