क्या SSRS क्वेरी करते समय तालिका को लॉक करता है?


9

मेरे वरिष्ठ DBA ने मुझे बताया कि डिफ़ॉल्ट रूप से SQL क्वेरी निष्पादन तालिका को लॉक नहीं करता है।

मैं अपनी SQL सर्वर रिपोर्टिंग सेवा (SSRS) रिपोर्ट के साथ कुछ समस्याएँ रख रहा था, जो लगता है कि लॉकिंग के साथ कुछ समस्याएँ हो रही हैं और कुछ त्रुटियाँ हो रही हैं।

मैंने कुछ Googling किया, लेकिन कुछ भी खोजने से कम हो गया।

क्या SSRS रिपोर्ट उन तालिकाओं को लॉक कर देती है, जिनकी जाँच की जा रही है?

क्या कोई MSDN प्रलेखन है जो इस व्यवहार को विशेष रूप से प्रलेखित करता है?


हम भी यही समस्या थी। हालाँकि यह तकनीकी रूप से आपके सवालों का जवाब नहीं है, लेकिन अगर आपने कुछ गंदे पाठों का जोखिम नहीं उठाया है, तो SET TRANSACTION ISOLATION LEVELउदाहरण के लिए डेटासेट प्रश्नों को शुरू करके हमने एक त्वरित सुधार किया READ UNCOMMITTEDहै।
जेरोन

भविष्य के लिए एक नोट के रूप में, आप SQL 2012 में एक AlwaysOn उपलब्धता समूह के साथ पढ़ने योग्य दूसरे के लिए लोड रिपोर्टिंग को पुनर्निर्देशित कर सकते हैं। msdn.microsoft.com/en-us/library/hh882437.aspx
wbus

जवाबों:


7

संक्षिप्त उत्तर: नहीं

लंबे समय तक ...

SQL सर्वर नहीं जानता कि यह SSRS इसे एक क्वेरी भेज रहा है। तो SSRS से क्वेरी किसी अन्य क्वेरी की तरह चलेगी।

यह अधिक संभावना है कि क्वेरी ऑप्टिमाइज़र SSRS क्वेरी के लिए टेबल लॉक का उपयोग करने का निर्णय लेता है। बेशक, यह एक अलग समस्या हो सकती है, लेकिन यह एक अलग सवाल है


मिमी तो SRSS तब तालिका को लॉक करने की कोशिश करता है जब वह क्वेरी करता है?
मेलाोस

T-SQL स्टेटमेंट के परिणामस्वरूप T-SQL स्टेटमेंट के आधार पर किसी प्रकार के लॉक या किसी अन्य प्रकार का परिणाम होता है। यह निर्भर नहीं करता है कि यह कथन कहां से उत्पन्न हुआ है (SSRS, क्वेरी विंडो, ऐप आदि)
Eric Higgins

4

मेरे वरिष्ठ ने मुझे बताया कि डिफ़ॉल्ट रूप से SQL क्वेरी निष्पादन के लिए तालिका लॉक नहीं होती है।

यह सच है। हालाँकि, इसका मतलब यह नहीं है कि कोई क्वेरी तालिका को लॉक नहीं कर सकती है

क्या SSRS की रिपोर्ट वास्तव में किसी भी तालिकाओं को बंद कर दी जाएगी, जो कि नियंत्रित की जा रही है?

SSRS डेटाबेस के खिलाफ क्वेरी या संग्रहीत कार्यविधि को चलाकर रिपोर्ट को प्रस्तुत करने के लिए उपयोग किया जाता है।

यह क्वेरी डेवलपर द्वारा परिभाषित की गई है, और यह आइसोलेशन स्तर और कितनी पंक्तियों में शामिल है, के आधार पर एक टेबल (या टेबल) को बंद कर सकती है । (वास्तव में, ऐसे मामले हो सकते हैं जहां आप इस उद्देश्य से करना चाहते हैं ।) नीचे की रेखा यह है कि यह डेवलपर पर निर्भर है कि क्वेरी के लिए लॉकिंग कैसे काम करता है। SSRS आपके लिए इस समस्या को हल नहीं कर सकता है। इसलिए कोई दस्तावेज नहीं है।

विचार करें (उदाहरण के लिए):

  • READ UNCOMMITTEDअगर गंदे रीड्स का उपयोग करना ठीक है
  • स्नैपशॉट अलगाव स्तर को सक्षम और उपयोग करना
  • स्टैंडबाय मोड में शिपिंग लॉग करें, और केवल पढ़ने के लिए कॉपी के खिलाफ चल रहे प्रश्नों

2

आपको कैसे पता चलेगा कि जब रिपोर्ट चल रही है तो कोई लॉक है? मैं आपको सुझाव दूंगा कि आप उस क्वेरी / स्टोर किए गए खरीद की जांच करें जो रिपोर्ट का स्रोत है और यह सुनिश्चित करता है कि यह अपने आप ठीक काम कर रहा है।

यदि आप सुनिश्चित हैं कि स्रोत क्वेरी ठीक काम कर रही है, तो SQL सर्वर प्रोफाइलर का उपयोग करके समस्या को इंगित करने का प्रयास करें। नीचे दिए गए लिंक से मदद मिल सकती है:
/programming/9107383/sql-server-profiler-capture-calls-to-your-dat डेटाबेस-stored-procs-during-rsrs


क्योंकि मैं कुछ ब्राउज़र पर रिपोर्ट चला रहा था और रिपोर्ट में ऐसी त्रुटियां हो रही हैं जो मृत लॉक वाली प्रक्रिया बंद हैं।
मेलाोस

उस स्थिति में, सबसे अधिक संभावना है कि आपकी रिपोर्ट किसी अन्य उपयोगकर्ता द्वारा लॉक किए गए डेटा को पढ़ने की कोशिश कर रही है (जैसे कोई व्यक्ति उसी रिकॉर्ड को अपडेट कर रहा है)। आप सभी "सेलेक्ट" स्टेटमेंट्स में "नो लॉक" के साथ जोड़ सकते हैं, अगर अनकम्यूटेड डेटा पढ़ना ठीक है।
स्काई
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.