कुछ उपयोगकर्ताओं के लिए क्वेरी धीमी है


11

मेरे पास C # .NET वेब एप्लिकेशन से जोड़े जाने वाले कुछ प्रश्न हैं जो मेरे लिए हमेशा तेज़ होते हैं (मैं SQL सर्वर पर एक स्थानीय व्यवस्थापक हूं) लेकिन उपयोगकर्ताओं के एक समूह (आवश्यक अनुमतियों के साथ डोमेन समूह) के लिए, क्वेरी अविश्वसनीय रूप से धीमी है बिंदु यह आवेदन में बाहर बार।

विभिन्न उपयोगकर्ताओं के लिए अलग-अलग चलाने के लिए सटीक एक ही क्वेरी का क्या कारण होगा?

और जानकारी:

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

2
निम्नलिखित प्रश्नों की जाँच करें । आप पा सकते हैं कि आप उसी स्थिति में हैं। मान लीजिए कि पहले यह एक और यह दूसरा प्रयास करें
मैरियन

3
धीमी क्वेरी (ies) पर प्रतीक्षा प्रकार (sysinos_os_waiting_tasks) क्या हैं, और यह भी कि प्रत्येक की वास्तविक निष्पादन योजनाएं क्या हैं (आपकी तेजी, उनकी धीमी गति)?
थॉमस स्ट्रिंगर

2
पिछली टिप्पणियों से सहमत हैं। मेरा पहला विचार पैरामीटर सूँघना भी होगा। यह देखने के लिए कि क्या योजनाएं अलग हैं, पहला कदम होना चाहिए।
मार्टिन स्मिथ

4
यदि पैरामीटर समान हैं (मैं मान रहा हूं कि इसका मतलब क्या है exact same query), तो इसे सूँघने का पैरामीटर नहीं होना चाहिए (उपयोगकर्ताओं को गलत पैरामीटर (एस) के लिए एक खराब योजना मिलती है), बल्कि उपयोगकर्ताओं को एक ही पैरामीटर के लिए अलग-अलग योजनाएं मिल रही हैं (रों)। यह सेटिंग्स की तरह हो सकता है quoted_identifierऔर arithabort, जिसे आप sys.dm_exec_sessionsतेज उपयोगकर्ता और धीमे उपयोगकर्ता के लिए तुलना कर सकते हैं , या यह इसलिए हो सकता है क्योंकि उनके पास अलग-अलग डिफ़ॉल्ट स्कीमा हैं और स्कीमा उपसर्ग के बिना ऑब्जेक्ट संदर्भित हैं। पैरामीटर सूँघना अभी भी शामिल हो सकता है (इसलिए उनमें से एक में एक बुरी योजना क्यों है)।
हारून बर्ट्रेंड

1
पुन: आपका संपादन क्या आपके पास अन्य उपयोगकर्ताओं के समान डिफ़ॉल्ट स्कीमा है? क्या आपने अभी तक धीमी और तेज़ रन के लिए निष्पादन योजनाओं पर कब्जा कर लिया है?
मार्टिन स्मिथ

जवाबों:


5

यदि पैरामीटर समान हैं (मैं मान रहा हूं कि इसका मतलब क्या है exact same query), तो इसे सूँघने का पैरामीटर नहीं होना चाहिए (उपयोगकर्ताओं को गलत पैरामीटर (एस) के लिए एक खराब योजना मिलती है), बल्कि उपयोगकर्ताओं को एक ही पैरामीटर के लिए अलग-अलग योजनाएं मिल रही हैं (रों)। यह सेटिंग्स की तरह हो सकता है quoted_identifierऔर arithabort, जिसे आप sys.dm_exec_sessionsतेज उपयोगकर्ता और धीमे उपयोगकर्ता के लिए तुलना कर सकते हैं , या यह इसलिए हो सकता है क्योंकि उनके पास अलग-अलग डिफ़ॉल्ट स्कीमा हैं और स्कीमा उपसर्ग के बिना ऑब्जेक्ट संदर्भित हैं। पैरामीटर सूँघना अभी भी शामिल हो सकता है (इसलिए उनमें से एक में एक बुरी योजना क्यों है)।


3

मैंने इसके दो कारण देखे हैं: 1, पैरामीटर सूँघना 2, कनेक्शन सेटिंग्स अलग हैं। यदि आप whoisactive चलाते हैं , तो यह आपको अलग-अलग कनेक्शन गुण दिखाएगा। मेरे पास वास्तव में इस पर एक ब्लॉग पोस्ट है, लेकिन मैंने कंपनी से विशिष्ट जानकारी को साफ नहीं किया है। (और न ही मैंने अभी तक अपना ब्लॉग सक्षम किया है);)


0

कोशिश करें: हर EXEC और टेबल संदर्भ पर स्कीमा निर्दिष्ट करें। जैसे, EXEC dbo.MyProc

वहाँ संघर्ष हो सकता है (जैसा कि मार्टिन स्मिथ ने सुझाव दिया है - 'समान डिफ़ॉल्ट स्कीमा'?) या recompiles


0

यह SQL सर्वर में एक बग प्रतीत होता है। मैं SQL Server 2008 के साथ इस बग का अनुभव करता हूं। मैंने नए संस्करणों का परीक्षण नहीं किया है। मैं एक व्यवस्थापक के रूप में लॉग इन कर सकता हूं और इस क्वेरी को चला सकता हूं और 0 सेकंड में प्रतिक्रिया प्राप्त कर सकता हूं:

select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME

फिर मैं कम अनुमतियों वाले उपयोगकर्ता के रूप में लॉग इन करता हूं, ठीक उसी क्वेरी को चलाता हूं और प्रतिक्रिया में 45 सेकंड लगते हैं।

यह लगातार और अधिक से अधिक है। अगर मैं अपनी दो क्वेरी विंडो के बीच में आगे, एक एडमिन के लिए और एक गैर-एडमिन के लिए बाउंस करता हूं, तो नॉन-एडमिन को हमेशा 45 सेकंड लगते हैं और एडमिन को 0 सेकंड लगते हैं।


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

आपके द्वारा अपने उत्तर में पहचानी गई समस्या SQL Server 2008 पर दोहराए जाने योग्य नहीं प्रतीत होती है। select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAMEलगातार गैर-SA लॉगिन के लिए तुरंत डेटा लौटाता है जिसमें कोई भी खोज अधिकार नहीं है।
मैक्स वर्नोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.