Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 19946|Отговор: 3

[Източник] Заключване на базата данни NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Копирай линк]
Публикувано в 14.01.2021 г. 15:23:14 ч. | | | |
NOLOCK
Когато тази опция е избрана, SQL Server чете или променя данни без никакви заключвания. В този случай потребителят може да прочете данни от нерегистрирана транзакция или връщане назад, известно като "мръсни данни".

ЗАДЪРЖАНЕ
Когато тази опция е избрана, SQL Server поддържа тази споделена заключваща система до края на цялата транзакция, без да я освобождава по пътя.

UPDLOCK
Когато тази опция е избрана, SQL Server използва заключване за промяна вместо споделено заключване при четене на данни и поддържа тази заключване до края на цялата транзакция или команда. Тази опция гарантира, че множество процеси могат да четат данни едновременно, но само този процес може да ги променя.

TABLOCK
Когато тази опция бъде избрана, SQL Server поставя споделено заключване върху цялата таблица, докато командата приключи. Тази опция гарантира, че другите процеси могат само да четат и да не променят данните.

ПАГЛОК
Тази опция е по подразбиране и при избране SQL Server използва споделена заключване на страницата.

TABLOCKX (Ексклузивна заключване на маса)
Когато тази опция бъде избрана, SQL Server ще заключи цялата таблица, докато командата или транзакцията приключи. Това ще предотврати други процеси да четат или променят данните в таблицата.

HOLDLOCK държи споделената заключваща система, докато цялата транзакция не бъде завършена, и трябва да бъде освободена веднага щом заключеният обект не е необходим, равно на нивото на изолация на СЕРИАЛИЗИРАЕМАТА транзакция

Операторът NOLOCK се изпълнява без издаване на споделено заключване, което позволява мръсни четения, което е равно на нивото на изолация на READ UNCOMMITTED транзакцията

PAGLOCK използва няколко заключвания на страници, при които се използва една заключване на маса

READPAST позволява на SQL сървъра да пропуска заключени линии и да изпълнява транзакции, а за нива на изолация на READ неангажирани транзакции пропуска само RID заключвания, не страници, зони и таблици

ROWLOCK налага използването на rowlock

TABLOCKX налага използването на изключителна заключване на ниво таблица, което предотвратява използването на таблицата от друга транзакция по време на транзакцията

UPLOCK принуждава използването на актуализации при четене на таблица без споделена заключване

Забележка: Разликата между заключването на таблица в база данни
SELECT * FROM TABLE WITH (HOLDLOCK) Други транзакции могат да четат таблицата, но не могат да актуализират или изтрият
SELECT * FROM TABLE WITH (TABLOCKX) Други транзакции не могат да четат, актуализират и изтриват таблици




Предишен:Отдалечен дисплей на настолен стол Win10 с два екрана
Следващ:.NET/C# Създайте акаунт за портфейла ETH и парола за потвърждение въз основа на Nethereum [с изходен код]
 Хазяин| Публикувано в 14.01.2021 г. 16:53:24 ч. |
Тествайте заключването на TABLOCKX

Тестовият sql е следният:


Тестване на C# кода:


Откритие,Цялата таблица е заключена, а данните могат да се запитват само когато транзакцията е изпълнена, както е показано на фигурата по-долу:



Изтрий WITH(TABLOCKX) и обнови данните само с ID 1, тестът е следният:



Тъй като Задача 2 и Задача 4 не включват данни с id 1, заявката е много бърза и 3 и 4 трябва да изчакат транзакцията да приключи, преди да направят заявка.

Поведение при модифициране на данни

При комитирана транзакция за четене, която използва версиониране на редове, изберете редовете, които да бъдат актуализирани чрез блокиращо сканиране, при което към реда на данните се прилага заключване (U-lock) при четене на стойността на данните. Това е същото като транзакция за комитирано четене, която не използва ред версиониране. Ако ред данни не отговаря на критериите за актуализация, върху този ред се освобождава заключване за актуализация и следващият ред се заключва и сканира.

Update Lock (U): Режим на заключване, който предотвратява задънени заключения, при който две транзакции първо четат ресурс от данни. В случай на модификация, използването на споделени и ексклузивни заключвания понякога причинява задни заключвания, докато използването на заключване за актуализация може да предотврати появата на блокиране. Блокадата за обновяване на ресурса може да бъде назначена само на една транзакция наведнъж, и ако ресурсът трябва да бъде модифициран, заключването за актуализация става изключително, в противен случай става споделено заключване.

Входът към хиперлинк е видим.

 Хазяин| Публикувано в 28.01.2021 г. 17:30:51 ч. |
Въпрос:

udpate a
Постави колона1 = 1
където idx = 1
Когато sqlserver изпълни update statement, той заключва цялата таблица

Анализ:

Структура на часовника,Без основен ключ не можете да заключите само редовете
 Хазяин| Публикувано в 2.05.2023 г. 11:47:24 ч. |
Оптимизация на заявки за Entity Framework WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com