2008-08-13 6 views
27

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

समस्या यह है कि आपके पास एक वेब एप्लिकेशन में आपके पृष्ठों में से एक है जब यह संग्रहीत प्रक्रिया कॉल पर जाता है, तो आप क्वेरी ढूंढने के लिए एसक्यूएल प्रोफाइलर या अपने एप्लिकेशन ट्रेस लॉग का उपयोग करते हैं और आप इसे पेस्ट करते हैं प्रबंधन स्टूडियो हमें यह समझने के लिए कि यह धीमा क्यों चल रहा है। लेकिन आप इसे वहां से चलाते हैं और यह हर बार एक सेकंड से भी कम समय में लौटकर, बस चमकता है।

मेरा विशेष मामला एएसपी.नेट 2.0 और एसक्यूएल सर्वर 2005 का उपयोग कर रहा था, लेकिन मुझे लगता है कि समस्या किसी भी आरडीबीएमएस सिस्टम पर लागू हो सकती है।

+0

मैं एक ही समस्या थी और http://stackoverflow.com/questions/250713/sqldataadapter-fill-method-slow मेरी समस्या – David

उत्तर

26

यह मैं अब तक अपना शोध से क्या सीखा है है।

.NET कनेक्शन सेटिंग्स में भेजता है जो आपके द्वारा प्रबंधित स्टूडियो में लॉग इन करते समय प्राप्त नहीं होते हैं।

-- network protocol: TCP/IP 
set quoted_identifier off 
set arithabort off 
set numeric_roundabort off 
set ansi_warnings on 
set ansi_padding on 
set ansi_nulls off 
set concat_null_yields_null on 
set cursor_close_on_commit off 
set implicit_transactions off 
set language us_english 
set dateformat mdy 
set datefirst 7 
set transaction isolation level read committed 

मैं अब हर क्वेरी है कि मैं जब एसक्यूएल सर्वर में लॉग इन चलाने ऊपर में स्थापित करने के लिए उन, सुनिश्चित करें कि सेटिंग्स ही कर रहे हैं बनाने के लिए चिपकाने हूँ: यहाँ आप जो देखते हैं अगर आप Sql प्रोफाइलर के सिलसिले सूंघ है।

इस मामले के लिए, मैंने अलग-अलग सेटिंग को अलग-अलग करने की कोशिश की, डिस्कनेक्ट करने और फिर से कनेक्ट करने के बाद, और पाया कि एरिथबोर्ट को बदलने से 9 0 सेकंड से 1 सेकंड तक समस्या क्वेरी कम हो गई है।

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

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

क्या अरिथबोर्ट सेटिंग के बारे में कुछ और है जो कुछ मामलों में धीरे-धीरे चलने के लिए क्वेरी का कारण बन सकता है?

समाधान सरल लग रहा था: बस संग्रहित प्रक्रिया के शीर्ष पर arithabort सेट करें। लेकिन इससे विपरीत समस्या हो सकती है: क्वेरी पैरामीटर को बदलें और अचानक यह 'ऑन' से 'ऑफ' के साथ तेजी से चलता है।

समय के लिए मैं यह सुनिश्चित करने के लिए 'रीकंपाइल के साथ' प्रक्रिया चला रहा हूं ताकि यह सुनिश्चित किया जा सके कि योजना हर बार पुनर्जीवित हो जाती है। यह विशेष रिपोर्ट के लिए ठीक है, क्योंकि इसे फिर से संकलित करने में एक सेकंड लग सकता है, और यह एक रिपोर्ट पर बहुत ध्यान देने योग्य नहीं है जो वापस लौटने के लिए 1-10 सेकंड लेता है (यह एक राक्षस है)।

लेकिन यह अन्य प्रश्नों के लिए एक विकल्प नहीं है जो अधिक बार चलते हैं और जितनी जल्दी संभव हो सके, कुछ मिलीसेकंड में लौटने की आवश्यकता होती है।

+1

+1 एसक्यूएल प्रोफाइलर से उन सेटिंग्स को पकड़ना और उन्हें प्रबंधन स्टूडियो में पेस्ट करना एक महान युक्ति है और मुझे लोड करने में मदद मिली है। –

+3

+1 सेट एरिथबॉर्टर ऑफ़लाइन मेरी पिछली-टाइम-आउट क्वेरी को खूबसूरती से काम करना शुरू करने के लिए पर्याप्त था। – Spud

+1

@ eric-z-beard आप इन मानों को कहां रखते हैं? एसपी के अंदर या EXEC sp_whatever से पहले .NET से – djandreski

0

SelectCommand टाइमआउट मान बदलने का प्रयास करें:

DataAdapter.SelectCommand.CommandTimeout = 120; 
+0

हल यह एक समाधान नहीं है! यह कामकाज है! – Icet

1

एक मचान बॉक्स पर बाहर परीक्षण यह पहली, यह एक सर्वर स्तर पर एसक्यूएल सर्वर के लिए

घोषित @option पूर्णांक

सेट @option = @@ विकल्पों को बदलने | 64

कार्यकारी sp_configure 'उपयोगकर्ता विकल्प', @option

RECONFIGURE

2

आप ASP.NET अभी तक पता लगाने चालू है? मेरे पास एक उदाहरण है जहां यह एसक्यूएल संग्रहीत प्रक्रिया नहीं थी, जो समस्या थी, यह तथ्य था कि प्रक्रिया 5000 पंक्तियों को वापस कर दी गई थी और ऐप समस्या उत्पन्न करने वाले 5000 आइटमों के साथ डाटाबेस सूची बनाने का प्रयास कर रहा था।

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

0

आप sp_who2 आदेश का उपयोग देखने के लिए प्रश्न में क्या प्रक्रिया कर रही है की कोशिश कर सकते। यह आपको दिखाएगा कि यह किसी अन्य प्रक्रिया द्वारा अवरुद्ध है, या अत्यधिक मात्रा में cpu और/या io समय का उपयोग कर रहा है।

1

उसी समस्या में जो SQL रिपोर्टिंग सेवाओं के साथ था। चर के प्रकार की जांच करने की कोशिश करो, मैं चर जगह में varchar भेजने जैसी SQL करने के विभिन्न प्रकार भेज रहा था जहां यह पूर्णांक होना चाहिए, या ऐसा ही कुछ। रिपोर्टिंग सेवा में और एसक्यूएल पर संग्रहीत प्रक्रिया में चर के प्रकारों को सिंक्रनाइज़ करने के बाद, मैंने समस्या हल की।

6

मुझे इसी तरह की समस्याएं आई हैं। स्पोक पर "रिकॉम्प्ली" विकल्प के साथ सेटिंग को आज़माएं ताकि सिस्टम को हर बार निष्पादन योजना को फिर से लागू करने के लिए मजबूर किया जा सके। कभी-कभी क्वेरी प्रोसेसर जटिल संग्रहित प्रक्रियाओं में बहुत सारी शाखाओं या केस स्टेटमेंट्स के साथ भ्रमित हो जाता है और केवल वास्तव में उप-इष्टतम निष्पादन योजना खींचता है। यदि ऐसा लगता है कि समस्या को ठीक करने के लिए आपको लगता है, तो आपको आंकड़ों को अद्यतित करने और/या स्पोक को तोड़ने की आवश्यकता होगी।

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

0

हमारे पास एक ही समस्या थी और यहां हमने जो पाया है।

हमारे डाटाबेस लॉग आकार डिफ़ॉल्ट पर रखा जा रहा था (814 एमबी) और ऑटो वृद्धि 10% थी। सर्वर पर, अधिकतम सर्वर मेमोरी को डिफ़ॉल्ट सेटिंग में भी रखा गया था (2147483647 एमबी)।

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

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