See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 19946|Vastuse: 3

[Allikas] Andmebaasi lukud NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Kopeeri link]
Postitatud 14.01.2021 15:23:14 | | | |
NOLOCK
Kui see valik on valitud, loeb või muudab SQL Server andmeid ilma lukustusteta. Sellisel juhul võib kasutaja lugeda andmeid Uncommitted Transaction ehk Roll Back'ist, mida nimetatakse "räpasteks andmeteks".

KINNIHOIDMINE
Kui see valik on valitud, hoiab SQL Server seda jagatud lukku kuni kogu tehingu lõpuni, ilma et seda teel vabastaks.

UPDLOCK
Kui see valik on valitud, kasutab SQL Server andmete lugemisel jagatud luku asemel modify lock'i ja hoiab seda lukku kuni kogu tehingu või käsu lõpuni. See valik tagab, et mitu protsessi saavad andmeid korraga lugeda, kuid ainult see protsess saab andmeid muuta.

TABLOCK
Kui see valik on valitud, paneb SQL Server kogu tabelile jagatud luku kuni käsu lõpuni. See valik tagab, et teised protsessid saavad andmeid lugeda, mitte muuta.

PAGLOCK
See valik on vaikimisi valik ning kui see valitakse, kasutab SQL Server jagatud lehe lukku.

TABLOCKX (eksklusiivne laualukk)
Kui see valik on valitud, paneb SQL Server luku kogu tabelile, kuni käsk või tehing lõpeb. See takistab teistel protsessidel tabelis olevaid andmeid lugeda või muuta.

HOLDLOCK hoiab jagatud lukku kuni kogu tehingu lõpetamiseni ning peaks vabastama kohe, kui lukustatud objekti enam vaja ei ole, mis võrdub SERIALISEERITAVA tehinguisolatsiooni tasemega

NOLOCK-lause täidetakse ilma jagatud lukustuseta, võimaldades räpaseid lugemisi, mis on võrdne READ UNCOMMITTED tehingu isoleerimise tasemega

PAGLOCK kasutab mitut leheküljelukku, kus kasutatakse ühte tabelilukku

READPAST võimaldab SQL serveril vahele jätta kõik lukustatud read ja täita tehinguid ning READ UNCOMCOMITY-tehingu isolatsioonitasemete puhul vahele jätta ainult RID-lukud, mitte lehe-, tsooni- ja tabelilukud

ROWLOCK nõuab ridalukkude kasutamist

TABLOCKX rakendab eksklusiivset tabelitasandi lukustust, mis takistab teistel tehingutel tabelit tehingu ajal kasutada

UPLOCK sunnib uuendusi kasutama, kui loetakse tabelit ilma jagatud lukustuseta

Märkus: Erinevus tabeli lukustamise vahel andmebaasis
SELECT * FROM tabelist WITH (HOLDLOCK) Teised tehingud võivad tabelit lugeda, kuid ei saa uuendada ega kustutada
SELECT * FROM table WITH (TABLOCKX) Teised tehingud ei saa tabeleid lugeda, uuendada ega kustutada




Eelmine:Win10 kaugtöölaua kahe ekraaniga ekraan
Järgmine:.NET/C# Loo ETH rahakoti konto ja verifitseerimisparool Nethereumi põhjal [lähtekoodiga]
 Üürileandja| Postitatud 14.01.2021 16:53:24 |
Testi TABLOCKX lukku

Testsql on järgmine:


C# koodi testimiseks:


Avastus,Kogu tabel on lukustatud ning andmeid saab pärida alles tehingu täitmisel, nagu alloleval joonisel näidatud:



Kustuta WITH(TABLOCKX) ja uuenda andmeid ainult ID 1-ga, test on järgmine:



Kuna ülesanne 2 ja ülesanne 4 ei hõlma andmeid ID 1-ga, on päring väga kiire ning 3 ja 4 peavad enne päringu esitamist ootama, kuni tehing lõpetab.

Käitumine andmete muutmisel

Kinnitatud lugemistehingus, mis kasutab reaversiooni, vali uuendatavad read blokeerimisskanni abil, kus andmereale rakendatakse uuenduslukk (U-lukk), kui andmeväärtus loetakse. See on sama mis pühendunud lugemistehing, mis ei kasuta reaversiooni. Kui andmerida ei vasta uuenduskriteeriumidele, vabastatakse sellel reale uuenduslukk ja järgmine rida lukustatakse ning skaneeritakse.

Update Lock (U): Lukustusrežiim, mis takistab ummikseisusid, kus kaks tehingut loevad esmalt andmeressurssi. Modifitseerimise puhul võib jagatud ja eksklusiivsete lukkude kasutamine mõnikord põhjustada ummikseisu, samas kui uuenduslukkude kasutamine aitab vältida ummikseisude tekkimist. Ressursi uuenduslukku saab määrata korraga ainult ühele tehingule ning kui ressurssi on vaja muuta, muutub uuenduslukk eksklusiivseks lukuks, vastasel juhul jagatud lukustuseks.

Hüperlingi sisselogimine on nähtav.

 Üürileandja| Postitatud 28.01.2021 17:30:51 |
Küsimus:

udpate a
seti veerg1 = 1
kus idx = 1
Kui sqlserver käivitab uuenduslause, lukustab ta kogu tabeli

Analüüs:

Jälgimisstruktuur,Ilma primaarvõtmeta ei saa lukustada ainult ridu
 Üürileandja| Postitatud 02.05.2023 11:47:24 |
Entity Framework päringute optimeerimine WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com