C # VS SSMS के समान अनुरोध को निष्पादित करने के लिए अलग-अलग निष्पादन समय दिया गया है


12

मेरा एक ऐसा निवेदन है

SELECT 
[EstimateId], 
[CreationUserId], 
[EstimateStatusValueId], 
[LanguageId], 
[LocationId], 
[EstimatorUserId], 
[FilterUnitSystemTypeId], 
[EstimateNumber], 
[RevisionNumber], 
[CreationDate], 
[ModificationDate], 
[ProjectDescription], 
[IsBsdq], 
[ClosingDate], 
[ClosingTime], 
[ClosingUpdatedOn], 
[DeadLineDate], 
[IsReceived], 
[Inclusion], 
[Exclusion], 
[Misc], 
[Note], 
[WorkDeadLines], 
[Comments], 
[Validity], 
[PlansLocation], 
[PlansReceivedFrom], 
[Price]
FROM [Estimate].[Estimates] 
ORDER BY [ClosingDate] ASC, [ClosingTime] ASC

जब मैं इस क्वेरी को SSMS में चलाता हूं तो मुझे 953ms का निष्पादन समय मिल जाता है, लेकिन जब मैं इस क्वेरी को मेरे C # में Linq Query से चलाता हूं तो मुझे 1813ms का निष्पादन समय मिल जाता है।

Linq Query ".net SqlClient Data प्रदाता" का उपयोग करता है और EntityFramework (EDMF फ़ाइल) के खिलाफ जारी किया जाता है। क्या यह एक मुद्दा हो सकता है?

क्या कोई जानता है कि क्यों मैं उन अनुरोधों के निष्पादन समय के बीच एक बड़ा अंतर रखता हूं जो समान हैं लेकिन एक ही डेटाबेस के खिलाफ अलग-अलग संदर्भ से निष्पादित होते हैं?

मैंने दोनों अनुरोधों के सभी निष्पादन योजनाओं को सत्यापित किया और वे अपनी संबंधित क्वेरी को संतुष्ट करने के लिए एक ही सूचकांक का उपयोग करते हैं।

C # अनुरोध के निष्पादन की योजना को देखने के लिए मैं शो प्लान एक्सएमएल ईवेंट को फंसाने के लिए एसक्यूएल प्रोफाइलर का उपयोग करता हूं और मैं इसकी तुलना एसएसएमएस में से एक से करता हूं और दोनों समान हैं।


बस एक छोटा सा सवाल - आप बिना किसी सर्च कंडीशन के सभी टेबल के डेटा का चयन क्यों कर रहे हैं? क्या आपको किसी भी फ़िल्टरिंग के बिना आवेदन में वास्तव में सभी डेटा की आवश्यकता है?
मैरियन १

हाँ यह एक ऐसी सुविधा है जिसकी मुझे आवश्यकता है लेकिन यह सुविधा अक्सर उपयोग नहीं की जाएगी। मुझे पता है कि जहां खंड के बिना एक बड़ी क्वेरी जारी करने के लिए इष्टतम नहीं है।
निको

वैसे भी मेरी चिंता खुद अनुरोध नहीं है, लेकिन समय को पूरा करने के बीच का अंतर है। मैं आपको यह क्वेरी दिखाता हूं लेकिन सभी प्रश्न समान परिणाम देते हैं। क्यों ?
निको

जवाबों:


6

क्या यह सुसंगत, समय के बाद का समय है?

मुझे एक सीपीयू अंतर दिखाई दे रहा है जो समय को संकलित कर सकता है। क्या कोई LINQ सेटिंग्स हैं जो इसे प्रभावित करती हैं?

संपादित करें:

  • Profiler में योजनाओं पर कब्जा
  • क्या आप सुनिश्चित हैं कि SQL Profiler में समान है ?

हाँ यह समय के बाद लगातार है। मैं linq सेटिंग्स के लिए नहीं जानता। लेकिन मैं इस लिंक मिल गया codeproject.com/KB/cs/linqsql2.aspx
निको

आप योजना को चित्र में दोनों क्वेरी के लिए देख सकते हैं। हाँ मुझे यकीन है कि एसक्यूएल प्रोफाइलर में ही है। SQL, Profiler, SSMS और C # ऐप सभी को विकास के उद्देश्य से मेरे कंप्यूटर पर होस्ट किया गया है।
निको

XML की वास्तविक योजना को प्रोइलर से कैप्चर करें । कैश से नहीं। आपके पास अलग-अलग प्रतिक्रियाएं हैं लेकिन आप एक अलग योजना दिखाते हैं = गलत योजना जो ऊपर दिखाई गई है
gbn


3

आप दो प्रश्नों के लिए निष्पादन योजनाओं को देखना चाहेंगे और देखेंगे कि वे कहां भिन्न हैं।


मैं अभी अपनी पोस्ट संपादित करता हूं ... और मैं पहले ही सत्यापित कर लेता हूं कि दोनों क्वेरी एक ही योजना का उपयोग करती हैं।
निको

1
मैं सिर्फ आपके द्वारा बताई गई घटना को प्रोफाइलर में जोड़ता हूं और यह मेरे अंतिम अनुरोध के समान है जो मैं अपने प्रश्न में पोस्ट करता हूं। मुझे वही योजनाएँ मिलीं .. किसी भी अन्य विचार ...
निको

2
सब कुछ सही लग रहा है। केवल एक चीज जो यह समझा सकती है कि क्या होगा यदि .NET एप्लिकेशन को डेटा जल्दी से पर्याप्त रूप से प्राप्त न हो। SQL Profiler में रिपोर्ट किए गए समय में सर्वर से क्लाइंट को डेटा स्थानांतरित करने के लिए समय की मात्रा शामिल है। इसलिए यदि क्लाइंट सब कुछ जल्दी से डाउनलोड नहीं करता है तो रिपोर्ट की गई रन टाइम अधिक लंबी होगी।
मर्देनी

2
फिर नीचे आता है कि डेटा के साथ एप्लिकेशन क्या कर रहा है, और यह डेटाबेस से डेटा कैसे पढ़ रहा है।
मर्देनी

3
मर्ड्नी के जवाब के समर्थन में मैं जोड़ूंगा कि मैंने 3 अलग-अलग एसक्यूएल ग्राहकों में एक क्वेरी का परीक्षण किया और उनके रिपोर्ट किए गए समय सभी अलग-अलग थे, हालांकि आईओ आँकड़े और निष्पादन योजनाएं समान थीं। यह सब आंतरिक तरीके से होता था कि ग्राहक डेटा का इलाज कैसे करते थे। मेरा मानना ​​है कि आप प्रबंधन स्टूडियो में या पाठ आउटपुट में एक फ़ाइल के आउटपुट के द्वारा अलग-अलग समय परिणाम प्राप्त कर सकते हैं। वैसे भी, जो मुझे याद है, से प्रलेखन ने कहा कि SQL हमेशा LINQ से SQL तक तेज होगा, इसलिए यह कोई आश्चर्य की बात नहीं है :-)।
मैरियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.