X
. की विशिष्टता ताले बनाम U
ताले
नीचे लॉक संगतता मैट्रिक्स में यह देखा जा सकता है कि X
लॉक केवल स्कीमा स्थिरता और इन्सर्ट रेंज-नल लॉक प्रकारों के साथ संगत है। U
निम्नलिखित अतिरिक्त साझा लॉक प्रकारों के साथ संगत है S
/IS
/RS-S
/RI-S
/RX-S
लॉक संगतता मैट्रिक्स http://i.msdn.microsoft.com/ms186396.LockConflictTable(en-us,SQL.105).gif
X
. की ग्रैन्युलैरिटी ताले
ये सभी स्तरों पर ठीक-ठाक निकाले जाते हैं। नीचे दी गई स्क्रिप्ट और प्रोफाइलर ट्रेस यह दर्शाता है कि उन्हें पंक्ति स्तर पर सफलतापूर्वक निकाला जा रहा है।
CREATE TABLE test_table (id int identity(1,1) primary key, col char(40))
INSERT INTO test_table
SELECT NEWID() FROM sys.objects
select * from test_table with (rowlock,XLOCK) where id=10
लेकिन पंक्तियों को अभी भी पढ़ा जा सकता है!
यह पता चला है कि read committed
. पर अलगाव स्तर SQL सर्वर हमेशा S
को नहीं निकालेगा यदि उनके बिना अप्रतिबद्ध डेटा पढ़ने का कोई जोखिम नहीं है, तो यह इस चरण को छोड़ देगा। इसका मतलब है कि कभी भी लॉक संघर्ष होने की कोई गारंटी नहीं है।
हालाँकि यदि प्रारंभिक चयन with (paglock,XLOCK)
. है तो यह करेगा पढ़ने के लेन-देन को X
. के रूप में रोकें पेज पर लॉक IS
. को ब्लॉक कर देगा पेज लॉक जिसकी हमेशा पाठक को आवश्यकता होगी। यह निश्चित रूप से समवर्ती पर प्रभाव डालेगा।
अन्य चेतावनियां
यहां तक कि अगर आप पंक्ति/पृष्ठ को लॉक करते हैं, तो इसका मतलब यह नहीं है कि आप तालिका में उस पंक्ति के सभी एक्सेस को ब्लॉक कर देते हैं। क्लस्टर्ड इंडेक्स में एक पंक्ति पर लॉक एक कवरिंग गैर-क्लस्टर इंडेक्स में संबंधित पंक्ति से डेटा पढ़ने वाले प्रश्नों को नहीं रोकेगा।