2008-09-16 13 views
6

का उपयोग करते समय एसक्यूएल प्रश्नों का अच्छा तरीका क्या लिंक एसक्यूएल का उपयोग करते समय एसक्यूएल प्रश्नों का समय है? मुझे वास्तव में लॉगिंग सुविधा पसंद है, लेकिन यह बहुत अच्छा होगा अगर आप किसी भी तरह से क्वेरी कर सकते हैं। कोई विचार?लिंक से एसक्यूएल

+0

मैं संभव के रूप में स्वत: रास्ता तलाश कर रहा हूँ। स्टॉपवॉच के साथ हर क्वेरी को खारिज करना काम करेगा, लेकिन यह बहुत काम है। –

उत्तर

5

एसक्यूएल प्रोफाइलर क्वेरी और समय प्राप्त करने के लिए, और प्रश्न विश्लेषक में निष्पादन पथ यह देखने के लिए कि बाधाएं कहां हैं।

0

हम एलएलबीएलजेन प्रो के साथ हमारे प्रश्नों का परीक्षण करने के लिए एसक्यूएल प्रोफाइलर का उपयोग करते हैं।

2

आप System.Diagnostics.Stopwatch का उपयोग कर सकते हैं, यह आपको क्वेरी निष्पादित समय पर ट्रैक करने की अनुमति देगा। बस याद रखें कि लिंक-> एसक्यूएल प्रश्न तब तक निष्पादित नहीं किए जाते जब तक कि आप उन पर गिनती न करें। यह भी ध्यान रखें कि यदि आप Console.Out पर लॉग इन कर रहे हैं तो एक महत्वपूर्ण प्रदर्शन हिट होगा।

0

सबसे अच्छा फाइलों को क्वेरी में लॉग करना है और उन्हें समय के लिए एसक्यूएल प्रोफाइलर का उपयोग करना है और क्वेरी के लिए इंडेक्स को ट्विक करना है।

9

जैसा कि दो लोगों ने पहले ही कहा है, एसक्यूएल प्रोफाइलर इसके लिए उपयोग करने के लिए आउट ऑफ़ द बॉक्स टूल है। मैं एक गूंज नहीं बनना चाहता हूं लेकिन मैं थोड़ी अधिक विस्तार से विस्तार करना चाहता था: न केवल यह SQL सर्वर से वास्तविक समय प्रदान करता है (जैसा कि ऐप-साइड से समय के विपरीत है जहां नेटवर्क I/O, कनेक्शन और कनेक्शन पूल के समय केक में जोड़े जाते हैं) लेकिन यह आपको [अक्सर अधिक महत्वपूर्ण] I/O आंकड़े आंकड़े भी देता है, लॉकिंग जानकारी (आवश्यकतानुसार) आदि

कारण I/O आंकड़े महत्वपूर्ण हैं कि यह एक बहुत महंगा है सर्वर संसाधनों की अत्यधिक मात्रा में उपभोग करते समय क्वेरी तेजी से चल सकती है। उदाहरण के लिए यदि निष्पादित एक क्वेरी अक्सर बड़ी तालिकाओं को हिट करती है और तालिका मिलान के परिणामस्वरूप कोई मेल खाने वाली अनुक्रमणिका नहीं होती है, तो प्रभावित तालिका SQL सर्वर (यदि यह कर सकती है) द्वारा स्मृति में कैश की जाएगी। यह कभी-कभी एक ही क्वेरी को तेज गति से निष्पादित करने का कारण बन सकता है जबकि असल में यह सर्वर संसाधनों को खाकर शेष सिस्टम/ऐप/डीबी को नुकसान पहुंचा रहा है।

लॉकिंग जानकारी लगभग उतनी ही महत्वपूर्ण है -> एक रिकॉर्ड के लिए पीके लुकअप करने वाले छोटे प्रश्नों को लॉकिंग और अवरुद्ध करने के कारण खराब समय हो सकता है। मैंने कहीं पढ़ा है कि यह साइट अपने शुरुआती बीटा दिनों में डेडलॉक्स से पीड़ित थी। एसक्यूएल प्रोफाइलर लॉकिंग के कारण होने वाली समस्याओं की पहचान और समाधान के लिए आपका मित्र है।

इसे सारांशित करने के लिए; चाहे आप एल 2 एस, ईएफ, सादा एडीओ का उपयोग करें - यदि आप यह सुनिश्चित करना चाहते हैं कि डेटाबेस के प्रति आपका ऐप "अच्छा व्यवहार करता है" हमेशा एसक्यूएल प्रोफाइलर विकास और परीक्षण के दौरान तैयार होता है। यह भुगतान करती है!

संपादित करें: चूंकि मैंने उपर्युक्त उत्तर लिखा है, मैंने एल 2 एस के लिए एक नया रनटाइम प्रोफाइलिंग टूल विकसित किया है जो दोनों दुनिया के सर्वश्रेष्ठ को एक साथ लाता है; SQL सर्वर, SQL सर्वर निष्पादन योजना, SQL सर्वर की "अनुपलब्ध अनुक्रमणिका" अलर्ट से I/O आंकड़े और सर्वर-साइड टाइम, प्रबंधित कॉल स्टैक के साथ संयुक्त, यह पता लगाने में आसान बनाता है कि कौन सा कोड एक निश्चित क्वेरी उत्पन्न करता है, और कुछ उन्नत फ़िल्टर विकल्प केवल कुछ प्रश्नों को पूरा करने के लिए जो कुछ मानदंडों को पूरा करते हैं। इसके अतिरिक्त, लाइव ग्राहक वातावरण में रनटाइम क्वेरी प्रोफाइलिंग को आसान बनाने के लिए लॉगिंग घटक को ऐप्स के साथ वितरित किया जा सकता है। उपकरण से डाउनलोड किया जा सकता है:

http://www.huagati.com/L2SProfiler/ जहां आप एक नि: शुल्क 45-दिवसीय परीक्षण लाइसेंस भी प्राप्त कर सकते हैं।

उपकरण के लिए एक लंबे समय तक पृष्ठभूमि विवरण और परिचय भी यहाँ पोस्ट किया जाता है:
http://huagati.blogspot.com/2009/06/profiling-linq-to-sql-applications.html

... और एक नमूना/और अधिक उन्नत फिल्टर विकल्पों में से कुछ का उपयोग करने का पूर्वाभ्यास यहाँ उपलब्ध है:
http://huagati.blogspot.com/2009/08/walkthrough-of-newest-filters-and.html

1

आप क्या कर सकता है DataContext.Log के लिए एक कस्टम TextWriter कार्यान्वयन जोड़ने जो एक फ़ाइल या स्मृति करने के लिए उत्पन्न एसक्यूएल लिखेंगे है। फिर उन प्रश्नों के माध्यम से लूप करें, उन्हें कच्चे ADO.NET कोड के साथ निष्पादित करें, प्रत्येक स्टॉपवॉच के साथ।

मैं एक ऐसी ही तकनीक का उपयोग किया है इससे पहले कि क्योंकि यह लग रहा था जब भी मैं कुछ कोड मैं प्रोफाइलर खुला नहीं था विकसित कर रहा था, और यह वास्तव में एक HTML पृष्ठ पर उन परिणामों उत्पादन करने के लिए आसान था। निश्चित रूप से आप वेबसाइट अनुरोध के प्रति दो बार निष्पादित करते हैं, लेकिन जब तक आप प्रोफाइलर में कुछ नहीं पकड़ लेते, तब तक प्रतीक्षा करने के बजाय निष्पादन समय Asap देखने में मददगार होता है।

इसके अलावा अपने एसक्यूएल उपकरण मार्ग मैं googling "धीमी क्वेरी DMV" और एक संग्रहीत प्रक्रिया है कि आप अपने DB में सबसे धीमी प्रश्नों पर आँकड़े दे सकते हो रही सिफारिश करेंगे करने के लिए जा रहे हैं। खराब प्रश्नों को ढूंढने के लिए प्रोफाइलर परिणामों के माध्यम से स्क्रॉल करना हमेशा आसान नहीं होता है। इसके अलावा एसक्यूएल 2005 DMV से अधिक सही प्रश्नों तुम भी आदेश देने से कर सकते हैं के साथ द्वारा CPU समय बनाम और इसके आगे कहते हैं कि सुविधा देता है।

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