MS SQL-Server 2000. Сивохин А.В. - 61 стр.

UptoLike

Составители: 

пользователю чаще всего не нужно предпринимать никаких действий по управлению
блокировками. Однако при необходимости в запросе можно явно указать, какой тип блокировки
надо использовать в том или ином случае. Команда SET LOCK_TIMEOUT позволяет регулировать
время ожидания разблокирования ресурса, по истечении которого выдается ошибка. Системная
хранимая процедура sp_configure ‘locks’, n устанавливает максимальное количество блокировок в
системе.
SQL Server 2000 поддерживает различные уровни блокирования объектов, начиная с
отдельной строки и заканчивая базой данных в целом:
RIDна уровне строки таблицы при вставке новых строк;
Keyна уровне индекса, когда блокируется его часть, соответствующая изменяемым в
транзакции данным;
Pageна уровне страницы;
Extent на уровне экстента;
Tableна уровне таблицы;
DBна уровне базы данных.
Основной единицей блокирования является страница, а минимальным элементом
строка. Сервер может динамически управлять уровнем блокирования для конкретной транзакции в
зависимости от характера запросов.
Для транзакции SQL Server 2000 может устанавливать различные уровни изоляции, чтобы
делать их независимыми друг от друга. Эти уровни соответствуют рассмотренными уровням
стандарта ANSI и решают четыре проблемы одновременного доступа:
READ UNCOMMITEDнезавершенное чтение: гарантируется только физическая
целостность данных;
READ COMMITEDзавершенное чтение: не возникает проблемы грязного чтения;
REPEATABLE READповторяющееся чтение: помимо решения проблемы грязного
чтения решается проблема неповторяемого чтения;
SERIALIZABLEсериализуемость: обеспечивает полную изоляцию транзакций друг от
друга.
Установка уровня изоляции транзакций устанавливается командой SET TRANSACTION
ISOLATION LEVEL.
В зависимости от выполняемых над данными действий SQL Server обеспечивает четыре
типа блокировок:
S (Shared)коллективная блокировка при чтении данных несколькими пользователями;
V (Update)блокировка обновления как подготовительная для перехода от коллективной
к монопольной блокировке;
E (Exclusive)монопольная блокировка, если транзакция изменяет данные;
BU (Bulk update)блокировка массового обновлении при выполнении операций
массового копирования в таблицу.
Помимо основных типов блокировок SQL Server 2000 поддерживает ряд специальных
блокировок, предназначенных для повышения производительности и функциональности
обработки данных. Блокировки этого типа называются блокировками намерения (intent locks). Они
используются сервером в том случае, если транзакция намеривается получить доступ к данным
вниз по иерархии и необходимо запретить другим транзакциям накладывать блокировки, которые
будут конфликтовать с блокировкой, накладываемой первой транзакцией.
Помимо рассмотренных блокировок
на данные SQL Server 2000 использует несколько
блокировок на метаданные, описывающие структуру объектов. Такими блокировками являются
блокировка схемы и блокировка диапазона ключа.
При работе многопользовательской системы возможны ситуации, когда две транзакции
блокируют два блока данных и для завершения работы каждой из транзакций необходим доступ к
данным, заблокированным ранее другой транзакцией. Это так называемые
мертвые”, или
пользователю чаще всего не нужно предпринимать никаких действий по управлению
блокировками. Однако при необходимости в запросе можно явно указать, какой тип блокировки
надо использовать в том или ином случае. Команда SET LOCK_TIMEOUT позволяет регулировать
время ожидания разблокирования ресурса, по истечении которого выдается ошибка. Системная
хранимая процедура sp_configure ‘locks’, n устанавливает максимальное количество блокировок в
системе.
         SQL Server 2000 поддерживает различные уровни блокирования объектов, начиная с
отдельной строки и заканчивая базой данных в целом:

        RID – на уровне строки таблицы при вставке новых строк;
        Key – на уровне индекса, когда блокируется его часть, соответствующая изменяемым в
транзакции данным;
        Page – на уровне страницы;
        Extent – на уровне экстента;
        Table – на уровне таблицы;
        DB – на уровне базы данных.

        Основной единицей блокирования является страница, а минимальным элементом –
строка. Сервер может динамически управлять уровнем блокирования для конкретной транзакции в
зависимости от характера запросов.
        Для транзакции SQL Server 2000 может устанавливать различные уровни изоляции, чтобы
делать их независимыми друг от друга. Эти уровни соответствуют рассмотренными уровням
стандарта ANSI и решают четыре проблемы одновременного доступа:

        READ UNCOMMITED – незавершенное чтение: гарантируется только физическая
целостность данных;
        READ COMMITED – завершенное чтение: не возникает проблемы грязного чтения;
        REPEATABLE READ – повторяющееся чтение: помимо решения проблемы грязного
чтения решается проблема неповторяемого чтения;
        SERIALIZABLE – сериализуемость: обеспечивает полную изоляцию транзакций друг от
друга.

        Установка уровня изоляции транзакций устанавливается командой SET TRANSACTION
ISOLATION LEVEL.
        В зависимости от выполняемых над данными действий SQL Server обеспечивает четыре
типа блокировок:

       S (Shared) – коллективная блокировка при чтении данных несколькими пользователями;
       V (Update) – блокировка обновления как подготовительная для перехода от коллективной
к монопольной блокировке;
       E (Exclusive) – монопольная блокировка, если транзакция изменяет данные;
       BU (Bulk update) – блокировка массового обновлении при выполнении операций
массового копирования в таблицу.

        Помимо основных типов блокировок SQL Server 2000 поддерживает ряд специальных
блокировок, предназначенных для повышения производительности и функциональности
обработки данных. Блокировки этого типа называются блокировками намерения (intent locks). Они
используются сервером в том случае, если транзакция намеривается получить доступ к данным
вниз по иерархии и необходимо запретить другим транзакциям накладывать блокировки, которые
будут конфликтовать с блокировкой, накладываемой первой транзакцией.
         Помимо рассмотренных блокировок на данные SQL Server 2000 использует несколько
блокировок на метаданные, описывающие структуру объектов. Такими блокировками являются
блокировка схемы и блокировка диапазона ключа.
        При работе многопользовательской системы возможны ситуации, когда две транзакции
блокируют два блока данных и для завершения работы каждой из транзакций необходим доступ к
данным, заблокированным ранее другой транзакцией. Это так называемые “мертвые”, или