समस्या
मेरे पास प्रश्नों की एक जोड़ी है, जो अनुक्रमिक अलगाव के तहत, आरएक्स-एक्स लॉक का कारण बनती हैं। हालाँकि, जब मैं लॉक अधिग्रहण देखने के लिए एक्सटेंडेड इवेंट्स का उपयोग करता हूं, तो आरएक्स-एक्स लॉक अधिग्रहण कभी नहीं दिखाई देता है, यह केवल जारी किया जाता है। यह कहां से आता है?
रेप्रो
यहाँ मेरी तालिका है:
CREATE TABLE dbo.LockTest (
ID int identity,
Junk char(4)
)
CREATE CLUSTERED INDEX CX_LockTest --not unique!
ON dbo.LockTest(ID)
--preload some rows
INSERT dbo.LockTest
VALUES ('data'),('data'),('data')
यहाँ मेरी समस्या बैच है:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
INSERT dbo.LockTest
VALUES ('bleh')
SELECT *
FROM dbo.LockTest
WHERE ID = SCOPE_IDENTITY()
--ROLLBACK
मैं इस सत्र द्वारा आयोजित ताले की जांच करता हूं, और आरएक्स-एक्स देखें:
SELECT resource_type, request_mode, request_status, resource_description
FROM sys.dm_tran_locks
WHERE request_session_id = 72 --change SPID!
लेकिन मेरे पास एक विस्तारित ईवेंट भी है lock_acquired
और lock_released
। मैं इसे उपयुक्त संबद्ध_बॉज़_ड पर फ़िल्टर करता हूं ... कोई आरएक्स-एक्स नहीं है।
रोलबैक निष्पादित करने के बाद, मुझे आरएक्स-एक्स (LAST_MODE) जारी दिखाई देता है, भले ही इसे कभी अधिग्रहित नहीं किया गया था।
मैंने क्या कोशिश की है
मैंने विस्तारित घटनाओं में सभी तालों को देखा - कोई फ़िल्टरिंग नहीं। कोई आरएक्स-एक्स ताले का अधिग्रहण नहीं किया।
मैंने Profiler की भी कोशिश की: एक ही परिणाम (निश्चित रूप से इसे नाम सही मिलता है ... नहीं "LAST_MODE")।
मैंने XE को लॉक एस्केलेशन के लिए चलाया - यह वहां नहीं है।
रूपांतरणों के लिए विशेष रूप से कोई XE नहीं है, लेकिन मैं इस बात की पुष्टि करने में सक्षम था कि कम से कम यू से एक्स लॉक रूपांतरण द्वारा कब्जा कर लिया गया है
lock_acquired
नोट का भी आरआई-एन है जो अधिग्रहीत हो जाता है लेकिन कभी जारी नहीं किया जाता है। मेरी वर्तमान परिकल्पना यह है कि आरएक्स-एक्स एक रूपांतरण लॉक है, जैसा कि यहां वर्णित है । मेरे बैच में ओवरलैपिंग की-रेंज लॉक हैं जो यह देखते हैं कि उन्हें रूपांतरण के योग्य होना चाहिए, लेकिन आरएक्स-एक्स लॉक रूपांतरण तालिका में नहीं है।
यह ताला कहाँ से आ रहा है, और इसे विस्तारित घटनाओं द्वारा क्यों नहीं उठाया गया है?