SQL सर्वर - अस्थाई बनाम भौतिक तालिकाएँ


14

#Temp तालिकाओं का उपयोग करने से दूर जाने और इसके बजाय SPIDs के साथ स्थायी भौतिक तालिकाओं का उपयोग करने के लिए मेरे स्थान पर एक आंदोलन चल रहा है। जब भी कोई पहले एक # तालिका में शामिल होता है, तो अब एक INSERT INTO dbo.MyPermanentTable (SPID, ...) VALUES (@@SPID, ...)की आवश्यकता होती है - साथ में DELETE FROM dbo.MyPermanentTable WHERE SPID = @@SPIDएक संग्रहीत प्रक्रिया की शुरुआत में बयानों का एक गुच्छा । इसके अतिरिक्त, यह बिना कहे चला जाता है कि कहीं भी इन 'अस्थायी डेटा को संग्रहीत करने के लिए स्थायी तालिकाओं' का उपयोग किया जाता है, किसी को शामिल करने के लिए सावधान रहना होगा WHERE SPID = @@SPID

इस अभ्यास के प्रति कदम के पीछे तर्क यह है कि यह सर्वर के समग्र प्रदर्शन में सुधार करेगा, जिस पर प्रश्न चल रहे हैं (I / O को कम करके और tempdb में विवाद)। मैं कई कारणों से इस दृष्टिकोण के लिए उत्सुक नहीं हूं - यह बदसूरत है, संभावित रूप से खतरनाक है और ऐसा लगता है कि यह उन प्रश्नों के प्रदर्शन को अच्छी तरह से नुकसान पहुंचा सकता है जो नई योजना का उपयोग करते हैं।

क्या किसी को भी #temp टेबल को खत्म करने के लिए इस या इसी तरह के दृष्टिकोण के साथ कोई अनुभव है?

जवाबों:


18

यह काफी आसानी से प्रदर्शित किया जा सकता है कि यह आईओ को कम नहीं करेगा और न ही विवाद, बल्कि दोनों को बढ़ाएगा

  • IO : #temp टेबल से डाली गई, पढ़ी या हटाई गई प्रत्येक पंक्ति अब @@ SPID तालिका से डाली जाएगी, पढ़ी जाएगी या हटाई जाएगी। लेकिन हर पंक्ति अतिरिक्त @@ SPID कॉलम के साथ व्यापक होगी, इसलिए आवश्यक पृष्ठों की संख्या में थोड़ी वृद्धि होगी और IO कभी भी इतना बड़ा होगा। लेकिन इससे भी महत्वपूर्ण बात यह है कि एक # टेबल टेबल की गिरावट और एक सत्र द्वारा एक नए सत्र की #temp तालिका के आरंभीकरण को अब ए के साथ सिम्युलेटेड करना होगा DELETE FROM @@spidTable WHERE spid = @@SPID, और इस प्रकार ट्रंकट / ऑपरेशन बनाना (यानी पृष्ठ सीमा प्रबंधन संचालन) को रूपांतरित किया जाएगा। पंक्ति संचालन में, अतुलनीय धीमे।
  • ध्यान दें : प्रत्येक स्कैन जो # टैम्प टेबल पर पेज लॉक का उपयोग कर रहा था, अब असंबंधित स्पाइड पंक्तियों के साथ एक पेज लॉक करने की क्षमता होगी, इस प्रकार पहले गैर-मौजूदा विवाद पैदा होगा। हर वह अपडेट जो अधिक करता है जो लॉक एस्केलेशन थ्रेशोल्ड को हिट करता है, लॉक को टेबल लॉक तक बढ़ाने का अवसर है और इस प्रकार प्रत्येक स्पाइड को ब्लॉक करता है

जबकि यह सच है कि आप अस्थायी IAM / SGAM / GAM कॉन्टेस्ट को tempdb में नहीं मारेंगे, यही कारण है कि ऐसा इसलिए होगा क्योंकि साधारण अतिरिक्त IO और अतिरिक्त विवाद के कारण आपके ऑपरेशन बहुत धीमे हो जाएंगे।


मैं उपरोक्त रेमस से पूरी तरह सहमत हूं - और एक उत्कृष्ट प्रतिक्रिया के लिए धन्यवाद। समस्या यह है कि हम एक तीसरे पक्ष के अनुप्रयोगों (एक सर्वर पर कई डेटाबेस के साथ, जिस पर हमारा अपना एक डेटाबेस है - हमें अपने डेटा बनाम प्रश्न करने की आवश्यकता है) पर एक कथित प्रदर्शन हिट का कारण बन रहा है। मुझे अभी भी लगता है कि आप सही हैं, मन - मैं / ओ बुद्धिमान मैं नए दृष्टिकोण की अपेक्षा पहले से काफी खराब प्रदर्शन करने के लिए करूँगा - बुद्धिमान, टेम्पर्डबॉडी की दृष्टि से चीजें बेहतर होंगी - हमारे यहां से, कुछ हद तक बदतर हैं।
होगा

आपके पास कितनी tempdb फाइलें हैं? मानक सेटअप वास्तव में बिल्कुल भी पैमाने पर नहीं है - आपके पास कई टेम्पर्ड डाइल और लॉग फाइलें होनी चाहिए, एक प्रति दृश्य प्रोसेसर कोर (प्रत्येक यदि हाइपर-वी है तो 2)।
TomTom

1
आप इन दो लेखों को जरूर पढ़ें: sqlskills.com/BLOGS/PAUL/post/… और sqlskills.com/BLOGS/PAUL/post/… क्योंकि वे सबसे आम टेम्पर्ड स्केलेबिलिटी मुद्दों को संबोधित करते हैं।
रेमस रुसानू

@TomTom वाह, वाह। एकाधिक लॉग फ़ाइलें? वास्तव में?
हारून बर्ट्रेंड

5

यह एक कठोर समाधान की तरह लगता है। टेम्पर्ड कंटेंट को कम करने (और इसके उपयोग को अनुकूलित करने) के बारे में कई लेख ऑनलाइन हैं - क्या आपके ऑर्गन ने पूरी तरह से जांच की है कि एवेन्यू?

http://www.sql-server-performance.com/tips/tempdb_p1.aspx

http://www.sqlservercentral.com/blogs/robert_davis/archive/2010/03/05/Breaking-Down-TempDB-Contention.aspx

http://searchsqlserver.techtarget.com/tip/Optimize-tempdb-in-SQL-Server-by-striping-and-splitting-to-multiple-files

आदि।


+1 पूरी तरह से सहमत हैं - tempdb को ऑप्टिमाइज़ करें, पहिया को सुदृढ़ न करें क्योंकि आपका कार्यान्वयन बदतर होगा। :)

मैं इस रास्ते का पालन नहीं करने के लिए सभी हूँ अगर यह न्यायसंगत नहीं है - बेन के लिए धन्यवाद - मैं जांच करूंगा और हमारे डीबीए को उचित सुझाव दूंगा।
एक

2

मुझे लगता है कि आप tempDB के भीतर प्रदर्शन की समस्याओं का निवारण किया जाना चाहिए, यहाँ कुछ सुझाव हैं


उपयोगी लगता है - धन्यवाद SPE109, मैं इसमें जांच करूंगा और हमारे DBA को उपयुक्त के रूप में सिफारिशें दूंगा।
एक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.