Поделиться через


Подсказки блокировок

С помощью инструкций SELECT, INSERT, UPDATE и DELETE можно определять диапазон подсказок блокировки на уровне таблиц в целях изменения стандартного поведения блокировки в Microsoft SQL Server Compact 3.5 (SQL Server Compact 3.5). Рекомендуется использовать подсказки блокировки только при необходимости. Они могут отрицательно повлиять на параллелизм.

Важно!

SQL Server Compact 3.5 автоматически получает блокировки, необходимые для операции. При использовании подсказок блокировки, приведенных в следующей таблице, в SQL Server Compact 3.5 увеличивается количество блокировок. Указания блокировки нельзя использовать для предупреждения блокировки ресурсов.

В следующей таблице приводится описание подсказок блокировки, которые можно использовать в SQL Server Compact 3.5.

Имя подсказки блокировки Описание подсказки

ГРАНУЛЯРНОСТЬ

ROWLOCK

Используйте блокировку на уровне строк при считывании и изменении данных. Данные виды блокировок получаются или освобождаются по мере необходимости.

Операции SELECT накладывают блокировку S на строки.

PAGLOCK

Используйте блокировку на уровне страниц при считывании и изменении данных. Данные виды блокировок получаются или освобождаются по мере необходимости.

Операции SELECT накладывают блокировку S на страницы.

TABLOCK

Используйте блокировку таблиц при считывании и изменении данных. Данная блокировка удерживается до окончания выполнения инструкции.

Операции SELECT накладывают блокировку S на таблицы.

DBLOCK

Используйте блокировку баз данных при считывании и изменении данных. Данная блокировка удерживается до окончания выполнения инструкции.

Операции SELECT накладывают блокировку S на базы данных.

LOCKMODES

UPDLOCK

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

Операции SELECT накладывают блокировку U. По умолчанию установлена гранулярность ROWLOCK.

XLOCK

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

Операции SELECT накладывают блокировку X. По умолчанию установлена гранулярность ROWLOCK.

ДЛИТЕЛЬНОСТЬ

HOLDLOCK

Используйте блокировку удержания, чтобы удержать блокировку до завершения транзакции и предотвратить ее освобождение в случае, если необходимые таблица, строка или данные более не требуются.

Если гранулярность не указана, применяется блокировка ROWLOCK.

NOLOCK

Блокировки не используются. Этот параметр задан по умолчанию для операций SELECT. Он не применяется к инструкциям INSERT, UPDATE, и DELETE.

ms172398.note(ru-ru,SQL.100).gifПримечание.
В SQL Server подсказка NOLOCK позволяет использовать уровень чтения незафиксированных данных. В SQL Server Compact 3.5 за счет подсказки NOLOCK все-таки можно использовать уровень изоляции чтения зафиксированных данных. SQL Server Compact 3.5 поддерживает копии данных, позволяя считывать их, не применяя общих блокировок для их защиты.

Дополнительные сведения об использовании подсказок блокировки см. в разделе «Подсказки блокировки» в электронной документации SQL Server.

Указание NOLOCK

Использование подсказок блокировки в SQL Server Compact 3.5 аналогично их использованию в SQL Server. Однако поведение подсказки NOLOCK в SQL Server Compact 3.5 значительно отличается от поведения в SQL Server. В SQL Server Compact 3.5 подсказка NOLOCK установлена по умолчанию для инструкций SELECT, но с принудительным включением чтения зафиксированных данных.

В SQL Server применение инструкции SELECT со стандартным уровнем изоляции чтения зафиксированных данных приводит к наложению на строки блокировки S, которая освобождается по мере чтения строк. Несмотря на принудительное включение уровня изоляции, это означает, что инструкция SELECT будет выжидать, если в строке, которой требуется блокировка S, существует несовместимая блокировка. Если задана подсказка NOLOCK, операция SELECT не будет применять блокировку S и разрешит считывание данных. Хотя операция и будет выполнена успешно, появляется вероятность считывания незафиксированных данных инструкцией SELECT.

Для обеспечения уровня чтения зафиксированных данных SQL Server Compact 3.5 не использует блокировку S. Поскольку при изменении данных в SQL Server Compact 3.5 используется механизм указания версий страниц, данные, необходимые инструкции SELECT, можно считать из соответствующей копии страницы. Ей не требуется применять блокировку S для обеспечения уровня чтения зафиксированных данных. Поэтому, хотя SQL Server Compact 3.5 и использует подсказку NOLOCK для инструкции SELECT, данные считываются на уровне изоляции чтения зафиксированных данных. В SQL Server Compact 3.5 неправильное чтение (чтение незафиксированных данных) невозможно.

ms172398.note(ru-ru,SQL.100).gifПримечание.
Указание NOLOCK не влияет на блокировки Sch-S и Sch-X.

См. также

Основные понятия

Основные принципы блокировки
Уровень изоляции транзакций
Отображение сведений о блокировке
Время ожидания блокировки

Справка и поддержка

Получение помощи (SQL Server Compact 3.5 с пакетом обновления 1)