Schema lock гарантирует, что таблица или индекс не будут удалены или схема не будет изменена.
Сервер SQL позволяет вам контролировать опции блокировки на уровне сессии с помощью установки изолированного уровня транзакций.
Изолированный уровень защищает определённые транзакции от других транзакций. Используйте изолированный уровень транзакций для установки изолированного уровня для всех транзакций в течении сессии. Когда вы устанавливаете изолированный уровень, вы указываете поведение по умолчанию блокировки для всех операторов в вашей сессии.
Установка изолированного уровня транзакции позволяет программистам принимать увеличивающийся риск целостности при обмене для большой конкуренции доступа к данным. Высочайший уровень изоляции, долго удерживаемых блокировок больше ограничивают эти блокировки.
Вы можете аннулировать изолированный уровень уровня сессии в индивидуальном операторе с помощью использования спецификации блокировок. Вы можете также использовать оператор DBCC USEROPTIONS для указания изоляции транзакции для оператора.
SET TRANSACTION ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | REPEATABLE READ | SERIALIZABLE }
Следующая таблица описывает опции блокировок изолированного уровня:
Опция |
Описание |
READ COMMITED |
Указывает на использование разделяемых блокировок для чтения. На этом уровне вы не можете использовать грязное чтение |
REPEATABLE READ |
Указывает, что грязное чтение и неповторяющееся чтение не может использоваться. Чтение блокируется и удерживается, пока транзакция не завершится |
SERIALIZABLE |
Не допускает других пользователей к обновлению, вставке новых строк. Иллюзия не может появиться. |
Следующий пример устанавливает изолированный уровень для текущей сессии для READ UNCOMMITTED и после этого проверяет DBCC USEROPTIONS для проверки что SQL Server сделал изменения.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
DBCC USEROPTIONS
Результат:
Set Option Value
---------------------- ---------------------
textsize 64512
language us_english
dateformat mdy
datefirst 7
quoted_identifier SET
arithabort SET
....
isolation level read uncommitted
(13 row(s) affected)
С помощью опции SET LOCK_TIMEOUT можно установить максимальное количество времени, которое SQL Server позволяет транзакции ожидать освобождения заблокированных ресурсов.
SET LOCK_TIMEOUT период
Период указывает количество миллисекунд. Если указать -1 (значение по умолчанию), то ожидание бесконечно. После изменения этого значение, оно сохраняется до конца сессии.
SET LOCK_TIMEOUT 180000
Для определение значения текущей сессии запросите глобальную переменную @@lock_timeout.
SELECT @@lock_timeout
Сервер SQL использует динамическую архитектуру блокировок для определения наиболее эффективной блокировки. Он автоматически определяет, какая блокировка наиболее подходит во время выполнения запроса, основываясь на характеристики схемы и запроса.
Сервер SQL автоматически увеличивает и уменьшает детализацию и типы блокировок. Оптимизатор запросов обычно выбирает корректную блокировку детализированную на момент компилирования плана выполнения, что минимизирует необходимость изолирования блокировок.
Для примера, если требуется обновление большого количества блокировок уровня строк, и заблокирован значительный процент таблицы, блокировка уровня строк повышается до блокировки уровня таблицы.
Хотя SQL Server использует динамическую архитектуру блокировок для выбора лучшей блокировки для вашего клиента, возможно указание опций блокировки уровня таблицы. Таблица может указать метод блокировки для оптимизатора запросов, который надо использовать для определённой таблицы или оператора.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.