Das Problem
Ich habe ein paar Abfragen, die unter serialisierbarer Isolation eine RX-X-Sperre verursachen. Wenn ich jedoch Extended Events verwende, um die Sperrenerfassung zu überwachen, wird die RX-X-Sperrenerfassung nie angezeigt, sondern nur freigegeben. Woher kommt das?
Der Repro
Hier ist mein Tisch:
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')
Hier ist meine Problemcharge:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
INSERT dbo.LockTest
VALUES ('bleh')
SELECT *
FROM dbo.LockTest
WHERE ID = SCOPE_IDENTITY()
--ROLLBACK
Ich überprüfe die von dieser Sitzung gehaltenen Sperren und sehe RX-X:
SELECT resource_type, request_mode, request_status, resource_description
FROM sys.dm_tran_locks
WHERE request_session_id = 72 --change SPID!
Ich habe aber auch ein Extended Event am lock_acquired
und lock_released
. Ich filtere es nach der entsprechenden zugehörigen Objekt-ID ... da ist kein RX-X.
Nach dem Ausführen des Rollbacks wird RX-X (LAST_MODE) veröffentlicht, obwohl es nie erworben wurde.
Was ich versucht habe
Ich habe mir alle Sperren in Extended Events angesehen - keine Filterung. Es wurden keine RX-X-Sperren erworben.
Ich habe auch Profiler ausprobiert: gleiche Ergebnisse (außer natürlich, dass der Name stimmt ... kein "LAST_MODE").
Ich habe die XE für Sperreneskalationen ausgeführt - sie ist nicht vorhanden.
Es gibt kein spezielles XE für Konvertierungen, aber ich konnte bestätigen, dass mindestens die Konvertierung von U in X-Sperre von erfasst wird
lock_acquired
Bemerkenswert ist auch der RI-N, der zwar erworben, aber nie veröffentlicht wird. Meine derzeitige Hypothese lautet, dass der RX-X eine Konvertierungssperre ist, wie hier beschrieben . In meinem Stapel gibt es überlappende Tastensperren, die für die Konvertierung in Frage kommen, aber die RX-X-Sperre befindet sich nicht in der Konvertierungstabelle.
Woher kommt dieses Schloss und warum wird es nicht von Extended Events aufgenommen?