sql >> Databáze >  >> RDS >> Sqlserver

SQL Server, zavádějící XLOCK a optimalizace

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.



  1. Pokročilé převzetí služeb při selhání pomocí háčků Post/Pre Script

  2. Dotaz s LEFT JOIN nevrací řádky pro počet 0

  3. Zkontrolujte, zda tabulka existuje, a pokud neexistuje, vytvořte ji v SQL Server 2008

  4. Jak filtrovat záznamy pomocí agregační funkce AVG