Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 19946|Ответ: 3

[Источник] Блокировки базы данных NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Скопировать ссылку]
Опубликовано 14.01.2021 15:23:14 | | | |
NOLOCK
При выборе этой опции SQL Server читает или изменяет данные без каких-либо блокировок. В этом случае пользователь может прочитать данные из незафиксированной транзакции или отката назад, известных как «грязные данные».

HOLDLOCK
При выборе этой опции 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 требует использования обновлений при чтении таблицы без общего блокировки

Примечание: Разница между блокировкой таблицы в базе данных
ВЫБРАТЬ * ИЗ ТАБЛИЦЫ С (HOLDLOCK) Другие транзакции могут читать таблицу, но не могут обновлять или удалять
ВЫБРАТЬ * ИЗ ТАБЛИЦЫ С (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 выполняет оператор обновления, он блокирует всю таблицу

Анализ:

Структура часов,Без основного ключа нельзя заблокировать только ряды
 Хозяин| Опубликовано 02.05.2023 11:47:24 |
Оптимизация запросов к фреймворку сносов WITH(NOLOCK)
https://www.itsvse.com/thread-9513-1-1.html
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com