架构师_程序员_码农网

Имя пользователя Получить пароль
Регистрация

QQ登录

Всего один шаг, чтобы начать

Поиск
Просмотров:9982|Ответов: 3
打印 上一主题 下一主题

[Информация]Блокировки базы данных NOLOCK, HOLDLOCK, UPDLOCK, TABLOCK, TABLOCKX

[Копировать ссылку]
Поднимайте прямо к 跳转到指定楼层
владелец
发表于 2021-1-14 15:23:14|只看该作者回帖奖励|Реверсивныйпросмотр|Режим чтения
NOLOCK
Когда этот параметр отмечен, SQL Server не добавляет блокировок при чтении или изменении данных. В этом случае пользователь может читать данные из незавершенной транзакции или отката, так называемые "грязные данные".

HOLDLOCK
Когда эта опция отмечена, SQL Server будет удерживать общую блокировку до конца всей транзакции, не освобождая ее по пути.

UPDLOCK
Когда эта опция отмечена, SQL Server использует блокировку модификации вместо общей блокировки при чтении данных и удерживает эту блокировку до конца всей транзакции или команды. Эта опция гарантирует, что несколько процессов могут читать данные одновременно, но только этот процесс может изменять данные.

TABLOCK
Когда эта опция отмечена, SQL Server накладывает общую блокировку на всю таблицу до конца выполнения команды. Эта опция гарантирует, что другие процессы могут только читать, но не изменять данные.

PAGLOCK
Эта опция используется по умолчанию. Если она отмечена, SQL Server использует общую блокировку страницы.

TABLOCKX (блокировка исключения таблиц)
Когда эта опция отмечена, SQL Server накладывает исключительную блокировку на всю таблицу до завершения команды или транзакции. Это не позволит другим процессам читать или изменять данные в таблице.

HOLDLOCK Удерживает общую блокировку до завершения транзакции и должна быть освобождена, как только заблокированный объект станет не нужен, что равно уровню изоляции транзакции SERIALIZABLE.

Выполнение оператора NOLOCK не устанавливает общую блокировку, разрешая грязное чтение, что соответствует уровню изоляции транзакции READ UNCOMMITTED.

PAGLOCK При использовании табличной блокировки используется несколько блокировок страниц.

READPAST Позволяет sql-серверу пропустить все заблокированные строки и выполнить транзакцию, применяется к уровню изоляции транзакции READ UNCOMMITTED, пропускает только RID-блокировки, но не страничные, региональные и табличные блокировки.

ROWLOCK Принудительное использование блокировок строк

TABLOCKX Принуждает использовать эксклюзивную блокировку на уровне таблицы, которая запрещает любой другой транзакции использовать таблицу в течение всего времени транзакции.

UPLOCK Принудительное использование обновлений при чтении таблицы без использования общей блокировки.

Примечание: Разница между блокировкой таблицы в базе данных
SELECT * FROM table WITH (HOLDLOCK) Другие транзакции могут читать таблицу, но не могут ее обновлять или удалять.
SELECT * FROM table WITH (TABLOCKX) Другие транзакции не могут читать таблицу, но не могут ее обновлять или удалять.




Предыдущая: Win10 удаленный рабочий стол двухэкранный дисплей
Next: .NET/C# на основе Nethereum для создания учетной записи ETH-кошелька и проверки пароля [с исходным кодом].
Первый - использовать ту же модель, что и в предыдущем случае, а второй - использовать ту же модель, что и в предыдущем случае.
SQL Server
трикотаж
楼主|发表于 2021-1-14 16:53:24|只看该作者
Проверка блокировки TABLOCKX

Тестовый sql выглядит следующим образом:


Тестовый код на c#:


Я обнаружил, что вся таблица заблокирована, только дождавшись завершения выполнения транзакции, можно запросить данные, рисунок ниже:



Удалите WITH(TABLOCKX) и обновите только данные с Id 1, проверьте, как показано ниже:



Поскольку в запросах задач 2 и 4 не используются данные с идентификатором 1, запросы выполняются очень быстро, в то время как для запросов задач 3 и 4 необходимо дождаться завершения транзакции, прежде чем они смогут быть запрошены.

Поведение при изменении данных

В транзакции с фиксированным чтением, использующей контроль версий строк, выборка строк для обновления выполняется с помощью блокирующего сканирования, при котором блокировка обновления (U lock) накладывается на строки данных по мере считывания значений данных. Это то же самое, что и транзакция чтения с фиксацией, в которой не используется контроль версий строк. Если строка данных не удовлетворяет критериям обновления, блокировка обновления снимается с этой строки, а следующая строка блокируется и сканируется.

Блокировка обновления (U): режим блокировки, предотвращающий возникновение тупиковых ситуаций. В случае двух транзакций, читающих и изменяющих ресурс данных, использование общих и эксклюзивных блокировок может иногда приводить к тупиковым ситуациям, в то время как использование блокировок обновления предотвращает возникновение тупиковых ситуаций. Блокировка обновления ресурса может быть назначена только одной транзакции одновременно. Если ресурс необходимо изменить, блокировка обновления станет эксклюзивной, в противном случае она станет общей.

h ttps:// docs.microsoft.com/zh-cn/sql/relational-databases/sql-server-transaction-locking-and-row-versioning-guide?view=sql-server- ver15#behaviour-when-modifying-data

Код фермерской сети, публикуется только в процессе практики, столкнувшись с техническими трудностями, не вводите в заблуждение других.
Ответить ЗаПротив

Отчет

Скамейки
楼主|发表于 2021-1-28 17:30:51|只看该作者
Вопрос:

udpate a
установить столбец1 = 1
где idx = 1
Когда sqlserver выполняет оператор обновления, он блокирует всю таблицу, верно?

Анализ:

Посмотрите на структуру таблицы, если нет первичного ключа, то можно не только блокировать строки.
Код фермерской сети, публикуется только в процессе практики, столкнулся с техническими трудностями, не вводите в заблуждение других.
сапоги угги продажа
напольное покрытие
楼主|发表于 2023-5-2 11:47:24|只看该作者
Оптимизация запросов Entity Framework WITH(NOLOCK)
h ttps:// www.itsvse.com/thread-9513-1-1.html
Я не уверен, что вы сможете извлечь из этого максимум пользы, но уверен, что вы сможете извлечь из этого максимум пользы.
Вы должны войти в систему, прежде чем сможете отправлять сообщения назад Войти | Зарегистрироваться

Эта версия интегральных правил


Отказ от ответственности: Все программное обеспечение, программные материалы или статьи, выпущенные код фермер сети ограничивается для изучения и исследования целей; вышеупомянутое содержание не должно быть использовано для коммерческих или незаконных целей, в противном случае, все последствия, пожалуйста, пользователь несет ответственность. Это сайт информации из сети, авторские права спор не имеет никакого отношения к этому сайту. Вы должны полностью удалить вышеуказанное содержимое с вашего компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купить регистрацию и получить лучше подлинного обслуживания. Если есть какие-либо нарушения, пожалуйста, свяжитесь с нами по электронной почте, чтобы разобраться с этим.

Почта To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-19 00:22

Быстрый ответНазад к началуНазад к списку