एक INSERT पर TABLOCK के साथ उपयोग करने के लाभ


15

कुछ परिस्थितियों में, INSERT INTO <tablename> (WITH TABLOCK)न्यूनतम लॉगिंग के कारण वसीयत करना तेज हो जाएगा। उन परिस्थितियों में BULK_LOGGEDरिकवरी मॉडल में डेटाबेस शामिल है ।

वहाँ का उपयोग करने के किसी भी अन्य संभावित प्रदर्शन लाभ है WITH TABLOCKएक पर INSERTएक खाली टेबल पर जब डेटाबेस ( tempdb ) उपयोग कर रहा है SIMPLEवसूली मॉडल?

मैं SQL सर्वर 2012 मानक संस्करण के साथ काम कर रहा हूँ।

मेरा उपयोग मामला बनाने और फिर तुरंत एक संग्रहीत प्रक्रिया के भीतर एक अस्थायी तालिका को पॉप्युलेट करने के लिए है INSERT...SELECTजिसमें एक , कुछ मिलियन पंक्तियों के रूप में हो सकता है। मैं उस तरह के टेम्पर्ड एब्यूज से बचने की कोशिश करता हूं , लेकिन कभी-कभी इसकी जरूरत होती है।

मैं एक केस बनाने की कोशिश कर रहा हूं TABLOCK। ऐसा लगता नहीं है कि यह कुछ भी चोट लगी है, और एक लाभ हो सकता है। मैं यह पता लगाने की कोशिश कर रहा हूं कि क्या हमारे कोड बेस में कहीं भी इसे जोड़ने के लिए पर्याप्त संभावित लाभ है, जहां मुझे यकीन है कि कोई अन्य प्रक्रिया नहीं है जो तालिका में लिखना चाहती है।

मैं आमतौर पर एक नई निर्मित स्थानीय अस्थायी तालिका में एक संकुल पीके के साथ सम्मिलित करता हूं, लेकिन कभी-कभी एक ढेर का उपयोग करता हूं।

जवाबों:


17

मैं कुछ लाभों के बारे में जानता हूं, लेकिन वे ज्यादातर स्थितिजन्य हैं।

  1. उपयोग TABLOCKकरने से संगामिति कम हो जाएगी लेकिन तुरंत लक्ष्य तालिका पर तालिका लॉक हो जाएगी। जब तक आप गारंटी दे सकते हैं कि सिर्फ एक सत्र तालिका में सम्मिलित होगा यह अनावश्यक पंक्ति या पृष्ठ ताले से बच जाएगा और ताला वृद्धि को रोक देगा । आखिरकार, अगर आप इतना डेटा डाल रहे हैं कि आपको वैसे भी लॉक एस्केलेशन मिलेगा, तो इसे अपफ्रंट में क्यों न करें?
  2. यदि आप TABLOCKसभी पृष्ठों के बिना एक खाली पृष्ठ-संकुचित ढेर में सम्मिलित कर रहे हैं , तो पृष्ठ संपीड़न के बजाय पंक्ति संपीड़न होगा :

नई सम्मिलित पंक्ति पृष्ठ-संकुचित है:

  • यदि नई पंक्ति पृष्ठ संपीड़न के साथ किसी मौजूदा पृष्ठ पर जाती है

  • यदि TABLOCK के साथ BULK INSERT के माध्यम से नई पंक्ति डाली गई है

  • यदि नई पंक्ति को INSERT INTO ... (TABLOCK) के माध्यम से सम्मिलित किया गया है तो चयन करें

अन्यथा, पंक्ति पंक्ति-संकुचित है।

  1. SQL सर्वर 2016 में TABLOCKसंकेत को समानांतर में ढेर , CCI (क्लस्टर्ड कॉलममीस्टोर इंडिक्स) और स्थानीय अस्थायी तालिकाओं में समानांतर सम्मिलित करने की आवश्यकता होती है । बहुत सारे प्रतिबंध हैं, जिनमें से कुछ दस्तावेज नहीं हैं। एक IDENTITYकॉलम नहीं हो सकता है , इंसर्ट एक OUTPUT, आदि के माध्यम से नहीं किया जा सकता है

डेटा लोड हो रहा है प्रदर्शन गाइड भी देखें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.