Добавил:
Меня зовут Катунин Виктор, на данный момент являюсь абитуриентом в СГЭУ, пытаюсь рассортировать все файлы СГЭУ, преобразовать, улучшить и добавить что-то от себя Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторный_практикум_по_АБД_sqlserver.docx
Скачиваний:
6
Добавлен:
03.08.2023
Размер:
496.52 Кб
Скачать

Блокировки в sql Server

SQL Server может блокировать следующие ресурсы: RID (строку с определенным идентификационным номером), KEY(Строку внутри индекса), Page (страницу), Extent (экстент ,8 страниц), Table (таблицу), DB (базу данных). SQL Server блокирует ресурсы, устанавливая блокировки различных типов (см. табл.1)

Таблица 1

Типы блокировок

Тип блокировки

Описание

Shared (S)

Используется для операций, которые не изменяют данные, такие как SELECT…

Update (U)

Используется для ресурсов, которые могут редактироваться

Exclusive (X)

Используются для операций, которые модифицируют данные (типа INSERT,UPDATE, DELETE). При этом запрещается доступ к одним и тем же ресурсам в одно и то же время

Intent (I…)

Используется для установки иерархии блокировок. Подтипы: IS,IX,SIX

Shema (SHC)

Используется, когда выполняется операция, зависящая от схемы таблицы. Подтипы: Shc-M,Shc-S

Bulk Update (BU)

Используется, когда выполняется массовая загрузка таблицы

Shared Lock (S) разрешает конкурирующим транзакциям выполнять операции чтения. Никакие другие транзакции не могут модифицировать данные, если установлена блокировка типа S. Эта блокировка снимается сразу же, как только данные будут прочитаны.

Update Lock (U) препятствует возникновению общих форм «мертвых блокировок». Типичный образец операции «Update» состоит из транзакции, читающей запись, овладевающей при этом S блокировкой на ресурс. Затем происходит модификация строки, которая требует преобразования блокировки в эксклюзивную (X). Если две транзакции имеют блокировки S на одном и том же ресурсе, а затем пытаются изменить данные, одна их них пытается преобразовать блокировку в X, но X блокировка не совместима с S блокировкой другой транзакции, и поэтому для нее наступает режим ожидания освобождения блокировки другой транзакцией. Другая транзакция также стремится преобразовать свою блокировку в X, и потому также находится в режиме ожидания. Происходит процесс т.н. «мертвой блокировки» (dead lock). Чтобы этого не случалось, операциям, которые должны производить модификацию, сразу же выделяется блокировка U. Только одна транзакция может получить такой тип блокировки. Если транзакция модифицирует процесс, то блокировка преобразуется к типу X, а иначе – к типу S.

Intent (I) блокировка показывает, что SQL Server хочет овладеть S или X блокировкой некоторого ресурса, который имеет более низкую иерархию. Например, IS таблицы показывает, что транзакция намеревается осуществить S блокировку страниц или строк внутри таблицы. Данная блокировка препятствует другой транзакции овладеть впоследствии эксклюзивной блокировкой таблицы, содержащей данную страницу. Блокировки типа I улучшают производительность, т.к. SQL Server проверяет наличие блокировки на уровне всей таблицы, чтобы определить, может ли другая транзакция установить на нее блокировку, а не проверяет наличие блокировок каждой отдельной строки.

SIX (Shared with intent exclusive) блокировка показывает намерение транзакции читать ресурсы, ниже по иерархии изменять некоторые из них. Конкурирующие IS блокировки на верхнем уровне разрешаются. Например, SIX блокировка таблицы допускает конкурирующую блокировку типа IS, размещая IX блокировку на уровне страницы и Х блокировку на уровне строки. Возможна только одна SIX блокировка на один ресурс в одно и то же время.

Schema Lock. Sch-M блокировка используется, если выполняется команда DDL (например, добавление колонки таблицы или удаление таблицы и т.д.).

Sch-S блокировка используется при компиляции запроса. Она не блокирует блокировки транзакций, включая и X блокировки, т.е. другая транзакция может выполняться при установке данной блокировки. Однако, операции DDL при этом выполняться не могут для заданных таблиц.

Блокировки Bulk Update Lock (BU) используются, когда выполняются операции массовой загрузки таблиц. BU позволяет выполнять разные процессы загрузки данных в одну и ту же таблицу, предотвращая доступ к ней процессам другого типа.

Совместимость блокировок указана в табл. 2.

Таблица 2

Типы блокировок

IS

S

U

IX

SIX

X

IS

+

+

+

+

+

-

S

+

+

+

-

-

-

U

+

+

-

-

-

-

IX

+

-

-

+

-

-

SIX

+

-

-

-

-

-

X

-

-

-

-

-

-

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

Sch-S совместима со всеми другими, кроме Sch-M блокировки.

Sch-M несовместима ни одной другой блокировкой.

BU блокировка совместима только с Sch-S или другой BU блокировками.

Приложение 6