Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 19946|Odpoveď: 3

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

[Kopírovať odkaz]
Zverejnené 14. 1. 2021 15:23:14 | | | |
NOLOCK
Keď je táto možnosť vybraná, SQL Server číta alebo upravuje dáta bez akýchkoľvek zámkov. V takom prípade môže používateľ čítať dáta z nezáväznej transakcie alebo vrátenia, známych ako "špinavé dáta".

HOLDLOCK
Keď je táto možnosť vybraná, SQL Server udržiava tento zdieľaný zámok až do konca celej transakcie bez jeho uvoľnenia počas cesty.

UPDLOCK
Keď je táto možnosť vybraná, SQL Server používa modifikačný zámok namiesto zdieľaného pri čítaní dát a tento zámok udržiava až do konca celej transakcie alebo príkazu. Táto možnosť zabezpečuje, že viaceré procesy môžu čítať dáta súčasne, ale iba tento proces môže údaje upravovať.

TABLOCK
Keď je táto možnosť vybraná, SQL Server uloží zdieľaný zámok na celú tabuľku, kým príkaz neskončí. Táto možnosť zabezpečuje, že ostatné procesy môžu iba čítať a nemôžu údaje upravovať.

PAGLOCK
Táto možnosť je predvolená a keď je vybraná, SQL Server používa zdieľaný zámok stránky.

TABLOCKX (Exkluzívny zámok stola)
Keď je táto možnosť vybraná, SQL Server uzamkne celú tabuľku, kým príkaz alebo transakcia neskončí. To zabráni iným procesom čítať alebo upravovať údaje v tabuľke.

HOLDLOCK drží zdieľaný zámok až do dokončenia celej transakcie a mal by byť uvoľnený hneď, ako uzamknutý objekt nie je potrebný, čo zodpovedá úrovni izolácie transakcie SERIALIZABLE

Príkaz NOLOCK sa vykonáva bez vydania zdieľaného zámku, čo umožňuje nečisté čítania, čo zodpovedá úrovni izolácie READ UNCOMMITTED transakcie

PAGLOCK používa viacero zámkov stránok, kde sa používa jeden zámok tabuľky

READPAST umožňuje SQL serveru preskočiť akékoľvek uzamknuté riadky a vykonávať transakcie, a pre úrovne izolácie transakcií READ uncommitted preskakuje len RID zámky, nie zámky stránok, zón a tabuliek

ROWLOCK vynucuje používanie rowlockov

TABLOCKX vynucuje použitie exkluzívneho zámku na úrovni tabuľky, ktorý zabraňuje akejkoľvek inej transakcii používať tabuľku počas transakcie

UPLOCK núti používať aktualizácie pri čítaní tabuľky bez zdieľaného zámku

Poznámka: Rozdiel medzi uzamknutím tabuľky v databáze
SELECT * FROM table WITH (HOLDLOCK) Iné transakcie dokážu tabuľku čítať, ale nemôžu ju aktualizovať alebo vymazať
VYBRAŤ * Z tabuľky pomocou (TABLOCKX) Ostatné transakcie nemôžu čítať, aktualizovať a mazať tabuľky




Predchádzajúci:Win10 vzdialený desktopový displej s dvoma obrazovkami
Budúci:.NET/C# Vytvoriť ETH peňaženkový účet a overovacie heslo na základe Nethereum [so zdrojovým kódom]
 Prenajímateľ| Zverejnené 14. 1. 2021 16:53:24 |
Otestujte TABLOCKX zámok

Testovací SQL je nasledovný:


Testovanie kódu v C#:


Objav,Celá tabuľka je uzamknutá a údaje je možné dotazovať až pri vykonaní transakcie, ako je znázornené na obrázku nižšie:



Vymažte WITH(TABLOCKX) a aktualizujte dáta iba s ID 1, test je nasledovný:



Keďže úlohy 2 a 4 neobsahujú údaje s id 1, dotaz je veľmi rýchly a 3 a 4 musia počkať na dokončenie transakcie pred odoslaním dotazu.

Správanie pri úprave dát

Pri záväznej transakcii čítania, ktorá používa veršovanie riadkov, vyberte riadky na aktualizáciu pomocou blokovacieho skenovania, kde sa pri čítaní dátovej hodnoty na riadok aplikuje aktualizačný zámok (U-lock). Ide o to isté ako záväzná čítacia transakcia, ktorá nepoužíva verzovanie riadku. Ak riadok dát nespĺňa kritériá aktualizácie, na tomto riadku sa uvoľní zámok aktualizácie a ďalší riadok sa uzamkne a naskenova.

Update Lock (U): Režim zámku, ktorý zabraňuje zablokovaniu, kde dve transakcie najprv čítajú dátový zdroj. V prípade modifikácie použitie zdieľaných a exkluzívnych zámkov niekedy spôsobuje zablokovanie, zatiaľ čo použitie aktualizačných zámkov môže zabrániť vzniku zablokovania. Aktualizačný zámok zdroja môže byť priradený len jednej transakcii naraz, a ak je potrebné zdroj upraviť, aktualizačný zámok sa stáva exkluzívnym zámkom, inak sa stáva zdieľaným zámkom.

Prihlásenie na hypertextový odkaz je viditeľné.

 Prenajímateľ| Zverejnené 28. 1. 2021 17:30:51 |
Vydať:

udpate a
nastaviť stĺpec1 = 1
kde idx = 1
Keď sqlserver vykoná update príkaz, uzamkne celú tabuľku

Analýza:

Štruktúra hodiniek,Bez primárneho kľúča nemôžete zamknúť len riadky
 Prenajímateľ| Zverejnené 2. 5. 2023 11:47:24 |
Optimalizácia dotazov v rámci entít pomocou (NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com