कच्चे प्रश्नों बनाम संग्रहीत प्रक्रियाओं की दक्षता


23

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


2
क्या आपने जो पढ़ा है, उसमें से कुछ के लिए लिंक पोस्ट कर सकते हैं? मुझे नहीं लगता कि प्रदर्शन यहां दांव पर है (कम से कम सीधे नहीं)
जैक डगलस

1
@JackDouglas, mrdenny's का उत्तर देखें। प्रदर्शन इस प्रश्न / उत्तर का एक हिस्सा है।
थॉमस स्ट्रिंगर

जवाबों:


31

यह SQL Server 2008 में कम है और उच्चतर है, लेकिन यह अभी भी है। निष्पादन योजना कैश और एसक्यूएल सर्वर को ऑटो-पैरामीरिज प्रश्नों के लिए सक्षम किया जा रहा है जो नीचे भेजे गए हैं। संग्रहीत प्रक्रियाओं का उपयोग करते समय (जिनके भीतर गतिशील एसक्यूएल नहीं है) प्रश्न पहले से ही पैराट्राइज्ड हैं इसलिए एसक्यूएल सर्वर नहीं करता है ' प्रत्येक योजना के लिए एक योजना उत्पन्न करने की आवश्यकता नहीं है, क्योंकि यह योजना के रूप में पहले से ही योजना कैश में संग्रहीत है।

और सुरक्षा समस्याओं (गतिशील SQL, न्यूनतम अनुमतियाँ, आदि) के बारे में मत भूलो जो संग्रहीत प्रक्रियाओं का उपयोग करते समय दूर हो जाती हैं।

जब एप्लिकेशन तालिकाओं में डेटा का चयन करने, सम्मिलित करने, अपडेट करने और हटाने के लिए डायनेमिक SQL का उपयोग कर रहा होता है, तो एप्लिकेशन को उन सभी ऑब्जेक्ट्स पर सीधे अधिकार रखने की आवश्यकता होती है। इसलिए यदि कोई सर्वर पर प्राप्त करने के लिए SQL इंजेक्शन का उपयोग करता है, तो उसके पास उन तालिकाओं के सभी डेटा को क्वेरी करने, बदलने या हटाने का अधिकार होगा।

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

यह देखते हुए कि SQL इंजेक्शन एक डेटाबेस में तोड़ने का सबसे आसान तरीका है, यह महत्वपूर्ण है।


@ मर्डेनी - क्या आप "कच्चे प्रश्नों" के साथ समान प्रभाव प्राप्त कर सकते हैं यदि वे पैरामीटर किए जाते हैं?
जैक डगलस

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

10

डेनी के जवाब के परिशिष्ट के रूप में, यह उन प्रणालियों को खोजने के लिए असामान्य नहीं है जहां महत्वपूर्ण बफर पूल मेमोरी एकल या कम उपयोग के ऐड-हॉक निष्पादन योजनाओं पर बर्बाद हो जाती है, प्रश्नों के परिणामस्वरूप प्रॉक्स पर उपयोग किया जाता है।

सबसे बुरे मामले हाल ही में, 8GB एक उदाहरण के लिए आवंटित, 3GB योजना कैश, 2.5GB एकल उपयोग योजना। इनमें से अधिकांश SQL2005 हो चुके हैं, इसलिए यह तदर्थ वर्कलोड सेटिंग के लिए ऑप्टिमाइज़ करने का प्रयास करने का विकल्प नहीं है।

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


उन एकल-उपयोग योजनाओं को हटाने के लिए स्क्रिप्ट सहित यहां एक महान संबंधित लेख है। sqlskills.com/blogs/kimberly/…
SomeGuy

7

SQL सर्वर कैश और संग्रहीत कार्यविधियों का अनुकूलन करता है और उसी तरह SQL-तदर्थ SQL को अनुकूलित करता है। उदाहरण के लिए, यह प्रक्रिया:

create procedure dbo.TestSB(@id int) as select * from Orders where id = @id

आशावादी और पहचान के लिए कैश किया जाएगा:

select * from Orders where id = @id

हालाँकि, हार्डकोड के कारण निम्न तदर्थ SQL को प्रभावी ढंग से कैश नहीं किया जा सकता है:

select * from Orders where id = 42

हालांकि प्रदर्शन समान है, संग्रहीत प्रक्रियाओं का उपयोग करने के अच्छे कारण हैं। संग्रहीत कार्यविधियाँ डीबीए और एप्लिकेशन डेवलपर्स के बीच एक स्पष्ट अलगाव प्रदान करती हैं। अपने मूल्यवान डेटा और लगातार बदलते कार्यक्रमों के बीच रक्षा की एक अतिरिक्त परत होना अच्छा है :)


+1 विशेष रूप से यदि आप अपने एसपी के माध्यम से जाने के लिए सभी पहुंच को मजबूर करते हैं और वे अच्छी तरह से एक ट्रांएक्शनल एपीआई के रूप में नहीं केवल सीआरयूडी परत के रूप में सोचे जाते हैं
जैक डगलस

2008+ में id = 42क्वेरी को सरल / मजबूर पैरामीटरेशन सेटिंग्स के आधार पर उसी योजना का उपयोग करके अनुकूलित किया जा सकता है। बेशक प्रश्नों को ठीक से पैरामीटराइज़ किया जाना चाहिए। :-)
हारून बर्ट्रेंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.