Exkluzivita X
zámky vs U
zámky
V matici kompatibility zámku níže je vidět, že X
zámek je kompatibilní pouze s typy zámků stability schématu a Insert Range-Null. U
je kompatibilní s následujícími dalšími sdílenými typy zámků S
/IS
/RS-S
/RI-S
/RX-S
matice kompatibility zámku http://i.msdn.microsoft.com/ms186396.LockConflictTable(en-us,SQL.105).gif
Granularita X
zámky
Ty se vyjímají dobře na všech úrovních. Níže uvedené trasování skriptu a profileru ukazuje, že byly úspěšně odstraněny na úrovni řádku.
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
Ale řádky lze stále číst!
Ukázalo se, že při read committed
úroveň izolace SQL Server ne vždy odstraní S
zámky, tento krok přeskočí, pokud bez nich nehrozí přečtení nepotvrzených dat. To znamená, že neexistuje žádná záruka, že ke konfliktu zámku vůbec někdy dojde.
Pokud je však počáteční výběr with (paglock,XLOCK)
pak to bude zastavte transakci čtení jako X
zámek na stránce zablokuje IS
zámek stránky, který bude čtenář vždy potřebovat. To bude mít samozřejmě dopad na souběžnost.
Další upozornění
I když zamknete řádek/stránku, neznamená to, že zablokujete všechny přístupy k danému řádku v tabulce. Zámek na řádku v seskupeném indexu nezabrání dotazům při čtení dat z odpovídajícího řádku v krycím neklastrovaném indexu.