Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Rollback TRAN



Здесь происходит возврат на начальное состояние таблицы, посколь­ку выполнение команды ROLLBACK TRAN без указания имени транзакции откатывает все транзакции.


Часть 3. Управление блокировками в среде MS SQL Server

Чаще всего не нужно предпринимать никаких дейст­вий по управлению блокировками. Всю работу по установке, снятию и разрешению конфликтов выполняет специальный компонент сервера, называемый менеджером блокировок.

MS SQL Server поддерживает раз­личные уровни блокирования объектов (или детализацию блокировок), начиная с отдельной строки таблицы и заканчивая базой данных в це­лом.

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

Блокирование на уровне строки позво­ляет наиболее точно управлять таким доступом, поскольку блокируют­ся только действительно изменяемые строки. Множество пользователей могут одновременно работать с данными с минимальными задержками. Платой за это является увеличение числа операций установки и снятия блокировок, а также большое количество служебной информации, ко­торое приходится хранить для отслеживания установленных блокиро­вок.

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

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

· Коллективная блокировка. Накладывается при выполнении операций чтения данных (оператор SELECT). Если сервер устано­вил на ресурс коллективную блокировку, то пользователь может быть уверен, что уже никто не сможет удалить или изменить эти данные.

· Блокировка обновления. Если на ресурс установлена коллективная блокировка и для этого ресурса устанавливается блокировка обнов­ления, то никакая транзакция не сможет дополнительно наложить коллективную блокировку или блокировку обновления.

· Монопольная блокировка используется, если транзакция изменяет данные. Когда сервер устанавливает монополь­ную блокировку на ресурс, то никакая другая транзакция не может ни прочитать, ни изменить данные. Монопольная блокировка не совместима ни с какими другими блокировками, то есть ни одна блокировка, включая монопольную, не может быть дополнительно наложена на ресурс.

· Блокировка массивного обновления. Накладывается сервером, если выполняются операции массивного пополнения таблицы. В это время несколько процессов могут одновременно вставлять строки в таблицу. При этом запре­щается обращение к таблице процессам, выполняющим иные действия.

Помимо перечисленных типов блокировок SQL Server поддерживает ряд специальных блокировок, предназначенных для повы­шения производительности и функциональности обработки данных.

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

Кроме того, в среде SQL Server существует два других типа блокировок:

· блокировка диапазона ключей;

· блокировка схемы (метаданных, описы­вающих структуру объекта).

Блокировка диапазона ключей решает проблему возникновения фантомов и обеспечивает требования сериализуемости транзакции. Бло­кировки этого типа устанавливаются на диапазон строк, соответствующих определенному логическому условию, с помощью которого осуществляет­ся выборка данных из таблицы.

Блокировка схемы используется при выполнении команд модифи­кации структуры таблиц для обеспечения целостности данных.

«Мертвые» блокировки

«Мертвые» (или тупиковые) блокировки характерны для многополь­зовательских систем.

«Мертвая» блокировка возникает, когда две тран­закции блокируют два блока данных и для завершения любой из них ну­жен доступ к данным, заблокированным ранее другой транзакцией.

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

Без применения специальных механизмов обнаружения и снятия «мертвых» блокировок нормальная работа транзакций будет нарушена.

Если в системе установлен бесконечный период ожидания завершения транзакции (а это задано по умолчанию), то при возникновении «мертвой» блокировки для двух транзакций вполне возможно, что, ожидая освобож­дения заблокированных ресурсов, в тупике окажутся и новые транзакции.

Чтобы избежать подобных проблем, в среде MS SQL Server реализован спе­циальный механизм разрешения конфликтов тупикового блокирования.

Для этих целей сервер снимает одну из блокировок, вызвавших кон­фликт, и откатывает транзакцию, инициализировавшую эту блокировку.

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

Полностью избежать возникновения «мертвых» блокировок нельзя.

Хотя сервер и имеет эффективные механизмы снятия таких блокировок, все же при написании приложений следует учитывать вероятность их воз­никновения и предпринимать все возможные действия для предупрежде­ния этого.

«Мертвые» блокировки могут существенно снизить произво­дительность, поскольку системе требуется достаточно много времени для их обнаружения, отката транзакции и повторного ее выполнения.

Для минимизации возможности образования «мертвых» блокиро­вок при разработке кода транзакции следует придерживаться следующих правил:

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

• избегать взаимодействия с пользователем в теле транзакции;

• минимизировать длительность транзакции и выполнять ее по воз­можности в одном пакете;

• применять как можно более низкий уровень изоляции.





Дата публикования: 2014-12-08; Прочитано: 315 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.012 с)...