मेरे एक सह-कार्यकर्ता ने हमारे SQL Server 2008 R2 डेटाबेस में संग्रहीत कार्यविधि का नाम दिया है sp_something
। जब मैंने यह देखा, मैंने तुरंत सोचा: "यह गलत है!" और इस ऑनलाइन लेख के लिए मेरे बुकमार्क खोजना शुरू कर दिया, जो बताता है कि यह गलत क्यों है, इसलिए मैं अपने सहकर्मी को स्पष्टीकरण प्रदान कर सकता हूं।
लेख में ( ब्रायन मोरन द्वारा ) यह समझाया गया है कि संग्रहीत प्रक्रिया को एक sp_ उपसर्ग देने से SQL सर्वर एक संकलित योजना के लिए मास्टर डेटाबेस को देखता है। क्योंकि sp_sproc
वहाँ निवास नहीं करता है, SQL सर्वर प्रक्रिया को फिर से शुरू करेगा (और उसके लिए एक विशिष्ट संकलन लॉक की आवश्यकता है, जिससे प्रदर्शन समस्याएं हो सकती हैं)।
दो प्रक्रियाओं के बीच अंतर दिखाने के लिए लेख में निम्नलिखित उदाहरण दिया गया है:
USE tempdb;
GO
CREATE PROCEDURE dbo.Select1 AS SELECT 1;
GO
CREATE PROCEDURE dbo.sp_Select1 AS SELECT 1;
GO
EXEC dbo.sp_Select1;
GO
EXEC dbo.Select1;
GO
आप इसे चलाते हैं, फिर Profiler खोलें (संग्रहीत कार्यविधियाँ -> SP:CacheMiss
ईवेंट जोड़ें) और संग्रहीत प्रक्रियाओं को फिर से चलाएँ। आप दो संग्रहीत प्रक्रियाओं के बीच अंतर देखने वाले हैं: sp_Select1
संग्रहीत कार्यविधि संग्रहीत कार्यविधि की SP:CacheMiss
तुलना में एक और घटना उत्पन्न करेगी Select1
(लेख SQL Server 7.0 और SQL Server 2000 का संदर्भ देता है ।)
जब मैं अपने SQL Server 2008 R2 वातावरण में उदाहरण चलाता हूं, तो मुझे SP:CacheMiss
दोनों प्रक्रियाओं के लिए समान मात्रा में (दोनों tempdb में और एक अन्य परीक्षण डेटाबेस में) मिलता है।
तो मैं सोच रहा हूँ:
- क्या मेरे उदाहरण के निष्पादन में कुछ गलत हो सकता है?
sproc sp_something
SQL सर्वर के नए संस्करणों में 'क्या एक उपयोगकर्ता का नाम नहीं है ' एडैजियम अभी भी मान्य है?- यदि हां, तो क्या एक अच्छा उदाहरण है जो SQL Server 2008 R2 में इसकी वैधता दिखाता है?
इस पर आपके विचारों के लिए बहुत बहुत धन्यवाद!
संपादित करें
मैंने SQL सर्वर 2008 R2 के लिए msdn पर संग्रहीत कार्यविधियाँ (डेटाबेस इंजन) बनाना पाया , जो मेरे दूसरे प्रश्न का उत्तर देता है:
हम अनुशंसा करते हैं कि आप उपसर्ग के रूप में sp_ का उपयोग करके किसी भी संग्रहीत कार्यविधियों का निर्माण न करें। SQL सर्वर सिस्टम संग्रहित प्रक्रियाओं को निर्दिष्ट करने के लिए sp_ उपसर्ग का उपयोग करता है। आपके द्वारा चुना गया नाम कुछ भविष्य की प्रणाली प्रक्रिया के साथ संघर्ष कर सकता है। [...]
हालांकि उपसर्ग का उपयोग करके होने वाली प्रदर्शन समस्याओं के बारे में कुछ भी उल्लेख नहीं किया गया है sp_
। मुझे यह जानकर अच्छा लगेगा कि यदि यह अभी भी मामला है या यदि उन्होंने इसे SQL Server 2000 के बाद ठीक किया है।
sp_
? यह एक तालिका के साथ उपसर्ग के रूप में उपयोगी है tbl
। आप इस व्यर्थ नामकरण सम्मेलन का उपयोग करने की अनुमति देने के लिए सिस्टम खोज मास्टर को पहले (भले ही वह नगण्य या कोई प्रदर्शन अंतर क्यों न हो) बनायें?
dbo.sp_Author_Rename
बेहतर क्यों है dbo.Author_Rename
। मैं एक भी चीज़ के बारे में नहीं सोच सकता जो समझ में आता है।
sp_
संस्करणों को हल करने के लिए थोड़ा अधिक ओवरहेड में डाल दिया (मास्टर और उपयोगकर्ता डेटाबेस दोनों में जांच करने की आवश्यकता है क्योंकि यह सिस्टम को प्राथमिकता देता हैmaster
-> उपयोगकर्ता DB में procs - गैर सिस्टम) मेंmaster
)