बड़ा अंतर, TABLOCK
"साझा" ताले और TABLOCKX
. को हथियाने की कोशिश करेंगे अनन्य ताले।
यदि आप एक लेन-देन में हैं और आप एक टेबल पर एक विशेष लॉक लेते हैं, उदा:
SELECT 1 FROM TABLE WITH (TABLOCKX)
कोई अन्य प्रक्रिया किसी . को हथियाने में सक्षम नहीं होगी मेज पर ताले, जिसका अर्थ है सभी लेन-देन होने तक तालिका से बात करने का प्रयास करने वाले प्रश्नों को अवरुद्ध कर दिया जाएगा।
TABLOCK
केवल एक साझा लॉक को पकड़ लेता है, यदि आपका लेन-देन अलगाव READ COMMITTED
है, तो स्टेटमेंट निष्पादित होने के बाद साझा किए गए लॉक जारी किए जाते हैं (चूक)। यदि आपका अलगाव स्तर अधिक है, उदाहरण के लिए:SERIALIZABLE
, साझा ताले लेन-देन के अंत तक आयोजित किए जाते हैं।
साझा ताले, हम्म, साझा किए गए हैं। मतलब 2 लेन-देन दोनों एक ही समय में टेबल से डेटा पढ़ सकते हैं यदि वे दोनों टेबल पर S या IS लॉक रखते हैं (TABLOCK
के माध्यम से) ) हालांकि, अगर transaction A
टेबल पर एक साझा लॉक रखता है, transaction B
जब तक सभी साझा किए गए लॉक जारी नहीं हो जाते, तब तक एक विशेष लॉक को हथियाने में सक्षम नहीं होगा। एमएसडीएन पर पढ़ें कि कौन से ताले किसके साथ संगत हैं।
दोनों संकेत डीबी को अधिक दानेदार ताले (जैसे पंक्ति या पृष्ठ स्तर के ताले) लेने से बाईपास करने का कारण बनते हैं। सिद्धांत रूप में, अधिक दानेदार ताले आपको बेहतर संगामिति की अनुमति देते हैं। तो उदाहरण के लिए, एक लेन-देन आपकी तालिका में पंक्ति 100 और दूसरी पंक्ति 1000, एक ही समय में को अपडेट कर सकता है दो लेन-देन से (यह पेज लॉक के साथ मुश्किल हो जाता है, लेकिन इसे छोड़ देता है)।
सामान्य तौर पर दानेदार ताले वही होते हैं जो आप चाहते हैं, लेकिन कभी-कभी आप किसी विशेष ऑपरेशन के प्रदर्शन को बढ़ाने और गतिरोध की संभावना को खत्म करने के लिए db संगामिति को कम करना चाह सकते हैं।
सामान्य तौर पर आप TABLOCK
. का उपयोग नहीं करेंगे या TABLOCKX
जब तक आपको किसी किनारे के मामले के लिए इसकी बिल्कुल आवश्यकता न हो।