সমস্যাটি
আমার কাছে ক্যারিয়ারগুলির একটি জুড়ি রয়েছে যা সিরিয়ালাইজযোগ্য বিচ্ছিন্নতার অধীনে একটি আরএক্স-এক্স লক তৈরি করে। যাইহোক, আমি যখন লক অধিগ্রহণ দেখার জন্য বর্ধিত ইভেন্টগুলি ব্যবহার করি তখন আরএক্স-এক্স লক অধিগ্রহণ কখনই উপস্থিত হয় না, এটি কেবল প্রকাশিত হয়। যেখানে এটি থেকে আসে?
রেপ্রো
এখানে আমার টেবিল:
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) মুক্তি পেয়েছি, যদিও এটি কখনও অর্জিত হয়নি released
আমি কি চেষ্টা করেছি
আমি বর্ধিত ইভেন্টগুলিতে সমস্ত লকের দিকে নজর রেখেছি - কোনও ফিল্টারিং নেই। কোনও আরএক্স-এক্স লক অর্জিত হয়নি।
আমি প্রোফাইলারও চেষ্টা করেছিলাম: একই ফলাফল (অবশ্যই এটি নামটি পেয়ে যায় ... "LAST_MODE" নয়)।
আমি লক এসকেলেশনগুলির জন্য এক্সই চালিয়েছি - এটি সেখানে নেই।
রূপান্তরগুলির জন্য বিশেষত কোনও এক্সই নেই, তবে আমি নিশ্চিত করতে পেরেছিলাম যে কমপক্ষে ইউ টু এক্স লক রূপান্তর দ্বারা ধরা পড়েছে
lock_acquired
এছাড়াও দ্রষ্টব্যটি হ'ল আরআই-এন যা অর্জন হয় তবে কখনই মুক্তি পায় না। আমার বর্তমান অনুমানটি হ'ল এখানে বর্ণিত হিসাবে আরএক্স-এক্স একটি রূপান্তর লক । আমার ব্যাচে ওভারল্যাপিং কী-রেঞ্জের লক রয়েছে যা দেখে মনে হচ্ছে তাদের রূপান্তরকরণের জন্য যোগ্য হওয়া উচিত, তবে আরএক্স-এক্স লক রূপান্তর টেবিলটিতে নেই।
এই লকটি কোথা থেকে আসছে এবং এটি কেন বর্ধিত ইভেন্টগুলি দ্বারা তুলে নেওয়া হচ্ছে না?