Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 19946|Válasz: 3

[Forrás] Adatbázis-zárak NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Linket másol]
Közzétéve 2021. 01. 14. 15:23:14 | | | |
NOLOCK
Ha ezt az opciót választják, az SQL Server zárolás nélkül olvas vagy módosítja az adatokat. Ebben az esetben a felhasználó olvashat adatokat egy elkötelezett tranzakcióból vagy visszafordításból, amit "piszkos adatoknak" neveznek.

FOGALOM
Ha ezt az opciót választják, az SQL Server fenntartja ezt a közös zárolást a teljes tranzakció végéig anélkül, hogy útközben feloldaná.

UPDLOCK
Ha ezt az opciót kiválasztották, az SQL Server módosító zárat használ az adatok olvasása során a megosztott zár helyett, és ezt a zárolást az egész tranzakció vagy parancs végéig fenntartja. Ez az opció biztosítja, hogy több folyamat egyszerre olvasson adatokat, de csak ez a folyamat módosíthatja az adatokat.

TABLOCK
Ha ezt az opciót kiválasztják, az SQL Server megosztott zárolást tesz az egész táblára, amíg a parancs véget nem ér. Ez az opció biztosítja, hogy más folyamatok csak olvashassák az adatokat, és nem tudják módosítani az adatokat.

PAGLOCK
Ez az alapértelmezett opció, és ha kiválasztják, az SQL Server megosztott oldalzárolást használ.

TABLOCKX (Exclusive Table Lock)
Ha ezt az opciót választják, az SQL Server zárolja az egész táblát, amíg a parancs vagy tranzakció véget nem ér. Ez megakadályozza, hogy más folyamatok felolvassák vagy módosítsák a táblázatban lévő adatokat.

A HOLDLOCK a megosztott zárolást tartja a teljes tranzakció befejezéséig, és akkor szabadon kell engedni, amint a zárolt objektumra nincs szükség, ami megegyezik a SERIALIZÁLHATÓ tranzakciós izolációs szinttel

A NOLOCK utasítást megosztott zár nélkül hajtják végre, így piszkos olvasásokat engednek le, ami megegyezik a READ UNCOMMITTED tranzakciós izolációs szinttel

A PAGLOCK több oldalzárat használ, ahol egy táblazárat használnak

A READPAST lehetővé teszi, hogy a sql szerver kihagyja a zárt sorokat és végrehajtson tranzakciókat, míg a READ UNCOMMITTED tranzakciós izolációs szinteknél csak a RID zárolásokat hagyja ki, nem az oldal-, zóna- és táblazárakat

A ROWLOCK érvényesíti a sorzárak használatát

A TABLOCKX exkluzív táblázatszintű zárolást kényszerít ki, amely megakadályozza, hogy bármely más tranzakció használja a táblát a tranzakció során

Az UPLOCK kényszeríti a frissítések használatát, amikor egy táblázatot olvasnak megosztott zár nélkül

Megjegyzés: A különbség egy táblázat adatbázisban történő zárolása között
SELECT * FROM table WITH (HOLDLOCK) Más tranzakciók olvashatják a táblát, de nem tudják frissíteni vagy törölni
SELECT * FROM táblázat WITH (TABLOCKX) Más tranzakciók nem olvashatók, frissíthetők és törölhetnek táblákat




Előző:Win10 távoli asztali kétképernyős kijelző
Következő:.NET/C# Létrehozz ETH tárca fiókot és ellenőrző jelszót Nethereum alapján [forráskóddal]
 Háziúr| Közzétéve 2021. 01. 14. 16:53:24 |
Teszteld a TABLOCKX zárat

A teszt SQL a következő:


A C# kód tesztelése:


Felfedezés,Az egész tábla zárolva van, és az adatokat csak a tranzakció végrehajtása után lehet lekérdezni, ahogy az alábbi ábrán látható:



Töröld a WITH(TABLOCKX) rendszert, és csak az 1-es azonosítóval frissítsd az adatokat, a teszt a következő:



Mivel a 2. és 4. feladat nem tartalmaz adatokat 1-es azonosítóval, a lekérdezés nagyon gyors, és a 3. és 4. feladatnak meg kell várniuk, amíg a tranzakció befejeződik, mielőtt lekérdezést indítanak.

Viselkedés adatmódosításkor

Egy elkötelezett olvasási tranzakcióban, amely sorverziózást alkalmaz, válaszd ki a frissítendő sorokat blokkoló szkenneléssel, ahol az adatérték olvasása esetén frissítő zárolás (U-lock) kerül az adatsorra. Ez ugyanaz, mint egy elkötelezett olvasási tranzakció, amely nem használ sorverziózást. Ha egy adatsor nem felel meg a frissítési kritériumoknak, akkor egy frissítési zárat engednek fel azon a soron, és a következő sort zárják és beszkennelik.

Update Lock (U): Egy zárolási mód, amely megakadályozza a holtpontokat, ahol két tranzakció először olvas egy adatforrást. Módosítás esetén a megosztott és exkluzív zárak használata néha holtponthoz vezethet, míg a frissítési zárak használata elkerülheti a holtpont kialakulását. Az erőforrás frissítési zára egyszerre csak egy tranzakcióhoz rendelhető, és ha az erőforrást módosítani kell, a frissítési zár exkluzív zárlatká válik, különben megosztott zárrá válik.

A hiperlink bejelentkezés látható.

 Háziúr| Közzétéve 2021. 01. 28. 17:30:51 |
Kiad:

udpate a
halmaz oszlop 1 = 1
ahol idx = 1
Amikor a sqlserver végrehajtja a frissítési utasítást, az egész táblát lezárja

Elemzés:

Figyelési szerkezet,Elsődleges kulcs nélkül csak a sorokat lehet zárolni
 Háziúr| Közzétéve 2023. 05. 02. 11:47:24 |
Entity Framework lekérdezés optimalizálása WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com