Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 19946|Odpověď: 3

[Zdroj] Databázové zámky NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Kopírovat odkaz]
Zveřejněno 14.01.2021 15:23:14 | | | |
NOLOCK
Když je tato možnost zvolena, SQL Server čte nebo upravuje data bez jakýchkoli zámků. V takovém případě může uživatel číst data z nezávazné transakce nebo vrácení zpět, což je známé jako "špinavá data".

HOLDLOCK
Když je tato možnost zvolena, SQL Server udržuje tento sdílený zámek až do konce celé transakce, aniž by jej cestou uvolnil.

UPDLOCK
Když je tato možnost vybrána, SQL Server používá při čtení dat zámek modifikace místo sdíleného zámku a tento zámek udržuje až do konce celé transakce nebo příkazu. Tato možnost zajišťuje, že více procesů může data číst současně, ale pouze tento proces může data upravovat.

TABLOCK
Když je tato možnost vybrána, SQL Server umístí sdílený zámek na celou tabulku až do konce příkazu. Tato možnost zajišťuje, že ostatní procesy mohou data pouze číst, ale nemohou je upravovat.

PAGLOCK
Tato možnost je výchozí a při výběru SQL Server používá sdílený zámek stránky.

TABLOCKX (Exkluzivní zámek stolu)
Když je tato možnost vybrána, SQL Server uloží zámek na celou tabulku, dokud příkaz nebo transakce neskončí. To zabrání jiným procesům v čtení nebo úpravě dat v tabulce.

HOLDLOCK drží sdílený zámek do dokončení celé transakce a měl by být uvolněn jakmile není uzamčený objekt potřeba, což odpovídá úrovni izolace transakce SERIALIZABLE

Příkaz NOLOCK se vykoná bez vydání sdíleného zámku, což umožňuje nečisté čtení, což odpovídá úrovni READ UNCOMMITTED transaction isolation

PAGLOCK používá více zámků stránek, kde se používá jeden zámek tabulky

READPAST umožňuje SQL serveru přeskočit všechny zamčené řádky a provádět transakce, a pro úrovně izolace transakcí READ UNCOMMITTED přeskočí pouze RID zámky, nikoli zámky stránek, zón a tabulek

ROWLOCK vyžaduje použití rowlocků

TABLOCKX vynucuje použití exkluzivního zámku na úrovni tabulky, který zabraňuje jakékoli jiné transakci v používání tabulky během transakce

UPLOCK vyžaduje použití aktualizací při čtení tabulky bez sdíleného zámku

Poznámka: Rozdíl mezi uzamčením tabulky v databázi
VYBERTE * Z tabulky POMOCÍ (HOLDLOCK) Jiné transakce mohou tabulku číst, ale nemohou ji aktualizovat ani mazat
VYBERTE * Z tabulky POMOCÍ (TABLOCKX) Ostatní transakce nemohou tabulky číst, aktualizovat ani mazat




Předchozí:Win10 vzdálený desktopový displej s dvěma obrazovkami
Další:.NET/C# Vytvořte ETH peněženku a ověřovací heslo na základě Nethereum [se zdrojovým kódem]
 Pronajímatel| Zveřejněno 14.01.2021 16:53:24 |
Otestujte zámek TABLOCKX

Testovací SQL je následující:


Testování kódu v C#:


Objev,Celá tabulka je zamčena a data lze dotazovat pouze při provedení transakce, jak je znázorněno na obrázku níže:



Smažte WITH(TABLOCKX) a aktualizujte data pouze s ID 1, test probíhá následovně:



Protože úkoly 2 a úkol 4 neobsahují data s id 1, dotaz je velmi rychlý a úkoly 3 a 4 musí počkat, až transakce dokončí, než mohou dotazovat.

Chování při úpravě dat

Při závazné transakci čtení, která používá verzování řádků, vyberte řádky, které mají být aktualizovány, pomocí blokovacího skenu, kde se při čtení datové hodnoty aplikuje aktualizační zámek (U-lock) na datový řádek. To je stejné jako zavázaná čtecí transakce, která nepoužívá verzování řádku. Pokud řádek dat nesplňuje kritéria aktualizace, je na tomto řádku uvolněn aktualizační zámek a další řádek je uzamčen a naskenován.

Update Lock (U): Režim zámku, který zabraňuje zablokování, kdy dvě transakce nejprve čtou datový zdroj. V případě modifikace někdy použití sdílených zámků a exkluzivních zámků způsobuje zablokování, zatímco použití aktualizačních zámků může zabránit vzniku patových situací. Aktualizační zámek zdroje lze přiřadit pouze jedné transakci najednou, a pokud je potřeba zdroj upravit, aktualizační zámek se stane exkluzivním, jinak se stane sdíleným zámkem.

Přihlášení k hypertextovému odkazu je viditelné.

 Pronajímatel| Zveřejněno 28.01.2021 17:30:51 |
Vydat:

udpate a
nastavit sloupec1 = 1
kde idx = 1
Když sqlserver spustí příkaz update, uzamkne celou tabulku

Analýza:

Struktura hodinek,Bez primárního klíče nemůžete zamknout pouze řádky
 Pronajímatel| Zveřejněno 02.05.2023 11:47:24 |
Optimalizace dotazů v rámci entity s POMOCÍ NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com