Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 19946|Odgovoriti: 3

[Vir] Zaklepi baze podatkov NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Kopiraj povezavo]
Objavljeno na 14. 01. 2021 15:23:14 | | | |
NOLOCK
Ko je ta možnost izbrana, SQL Server bere ali spreminja podatke brez kakršnihkoli zaklepov. V tem primeru lahko uporabnik prebere podatke iz nepotrjene transakcije ali povračila, kar je znano kot "umazani podatki".

HOLDLOCK
Ko je ta možnost izbrana, SQL Server ohranja to skupno zaklepanje do konca celotne transakcije, ne da bi ga sprostil na poti.

UPDLOCK
Ko je ta možnost izbrana, SQL Server uporablja zaklep za spreminjanje namesto skupnega zaklepa pri branju podatkov in to zaklepanje ohranja do konca celotne transakcije ali ukaza. Ta možnost zagotavlja, da lahko več procesov bere podatke hkrati, vendar jih lahko spreminja le ta proces.

TABLOCK
Ko je ta možnost izbrana, SQL Server postavi skupno zaklepanje na celotno tabelo, dokler ukaz ne preneha. Ta možnost zagotavlja, da lahko drugi procesi podatke le berejo in jih ne spreminjajo.

PAGLOCK
Ta možnost je privzeta možnost, in ko je izbrana, SQL Server uporablja zaklepanje skupne strani.

TABLOCKX (Ekskluzivna ključavnica za mizo)
Ko je ta možnost izbrana, SQL Server zaklene celotno tabelo, dokler se ukaz ali transakcija ne konča. To bo preprečilo drugim procesom, da bi brali ali spreminjali podatke v tabeli.

HOLDLOCK hrani skupno zaklepanje, dokler ni celotna transakcija zaključena, in ga je treba sprostiti takoj, ko zaklenjeni objekt ni potreben, kar ustreza ravni izolacije transakcije SERIALIZABLE

Izjava NOLOCK se izvede brez izdaje skupnega zaklepa, kar omogoča umazana branja, kar je enako ravni izolacije transakcij READ UNCOMMITTED

PAGLOCK uporablja več zaklepov strani, kjer se uporablja ena zaklep za mizo

READPAST omogoča sql strežniku, da preskoči vse zaklenjene vrstice in izvede transakcije, za izolacijo transakcij READ UNCOMMITTED pa preskoči le RID ključavnice, ne pa zaklepov strani, con in tabel

ROWLOCK zagotavlja uporabo rowlockov

TABLOCKX zagotavlja uporabo ekskluzivne zaklepanosti na ravni tabele, ki preprečuje, da bi katera koli druga transakcija uporabljala tabelo med transakcijo

UPLOCK zahteva uporabo posodobitev pri branju tabele brez skupnega zaklepa

Opomba: Razlika med zaklepanjem tabele v podatkovni bazi
SELECT * FROM table WITH (HOLDLOCK) Druge transakcije lahko berejo tabelo, vendar ne morejo posodobiti ali izbrisati
SELECT * FROM TABLE WITH (TABLOCKX) Druge transakcije ne morejo brati, posodabljati in brisati tabel




Prejšnji:Win10 oddaljeni namizni zaslon z dvema zaslonoma
Naslednji:.NET/C# Ustvarite ETH denarnico in geslo za preverjanje na podlagi Nethereuma [z izvorno kodo]
 Najemodajalec| Objavljeno na 14. 01. 2021 16:53:24 |
Preizkusite TABLOCKX ključavnico

Testni SQL je naslednji:


Testiranje C# kode:


Odkritje,Celotna tabela je zaklenjena, podatke pa je mogoče poizvedovati šele, ko je transakcija izvedena, kot je prikazano na spodnji sliki:



Izbriši WITH(TABLOCKX) in posodobi podatke samo z ID 1, test je naslednji:



Ker Nalogi 2 in Nalogi 4 ne vključujeta podatkov z id 1, je poizvedba zelo hitra, zato morata 3 in 4 počakati, da se transakcija zaključi, preden začneta poizvedbo.

Obnašanje pri spreminjanju podatkov

Pri transakciji zavzetega branja, ki uporablja verzioniranje vrstic, izberite vrstice, ki jih je treba posodobiti, z uporabo blokirnega skeniranja, kjer se ob branju podatkovne vrednosti na vrstico podatkov uporabi zaklep posodobitve (U-lock). To je enako kot transakcija za branje z zavezanim branjem, ki ne uporablja verzioniranja vrstic. Če vrstica podatkov ne izpolnjuje kriterijev za posodobitev, se na tej vrstici sprosti zaklep posodobitve, naslednja vrstica pa se zaklene in skenira.

Update Lock (U): Način zaklepanja, ki preprečuje zastoje, kjer dve transakciji najprej prebereta podatkovni vir. V primeru spremembe uporaba skupnih in ekskluzivnih zaklepov včasih povzroči zastoje, medtem ko uporaba posodobitvenih zaklepov lahko prepreči nastanek zastojev. Zaklep posodobitve vira je mogoče dodeliti le eni transakciji naenkrat, in če je treba vir spremeniti, zaklep posodobitve postane izključen, sicer postane deljeni zaklep.

Prijava do hiperpovezave je vidna.

 Najemodajalec| Objavljeno na 28. 01. 2021 17:30:51 |
Vprašanje:

udpate a
nastavi stolpec1 = 1
kjer je idx = 1
Ko sqlserver izvede ukaz update, zaklene celotno tabelo

Analiza:

Struktura ure,Brez primarnega ključa ne morete zakleniti samo vrstic
 Najemodajalec| Objavljeno na 2. 05. 2023 11:47:24 |
Optimizacija poizvedb v okviru entitete Z (NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com