8.2 Блокировки
Наиболее распространенным механизмом, используемым в СУБД для сериализации транзакций, является механизм блокировок.
Блокировка – это временное ограничение доступа к данным, участвующим в транзакции, со стороны других транзакций.
Основная идея блокировки заключается в том, что если для выполнения некоторой транзакции необходимо, чтобы какой-либо объект (как правило, это строка таблицы) не изменился без ведома этой транзакции, то этот объект блокируется. Доступ к заблокированному объекту со стороны других транзакций ограничивается. Следовательно, вызвавшая блокировку транзакция в состоянии выполнить необходимую обработку с учетом того, что обрабатываемый объект не будет самопроизвольно изменяться (с точки зрения данной транзакции) столько времени, сколько потребуется. Блокировки по-другому называют синхронизационными захватами.
Самый простой вариант блокировки — это блокировка объекта на все время действия транзакции. Подобный пример рассмотрен на рисунке 8.1. Здесь две транзакции, названные условно А и В, работают с тремя таблицами: Т1, Т2 и Т3. В момент начала работы с любым объектом этот объект блокируется транзакцией, которая с ним начала работу, и он становится недоступным всем другим транзакциям до окончания транзакции, заблокировавшей ("захватившей") данный объект. После окончания транзакции все заблокированные ею объекты разблокируются и становятся доступными другим транзакциям. Если транзакция обращается к заблокированному объекту, то она остается в состоянии ожидания до момента разблокировки этого объекта, после чего она может продолжать обработку данного объекта. Поэтому транзакция В ожидает разблокировки таблицы Т2 транзакцией А. Над прямоугольниками стоит условное время выполнения операций.
Рисунок 8.1 - Блокировка объекта на все время действия транзакции
В общем случае на момент выполнения транзакция получает как бы монопольный доступ к объектам БД, с которыми она работает. В этом случае другие транзакции не получают доступа к объектам БД до момента окончания транзакции. Такой механизм действительно ликвидирует все перечисленные ранее проблемы: пропавшие изменения, неподтвержденные данные, несогласованные данные, строки-фантомы. Однако такая блокировка создает новые проблемы — задержку выполнения транзакций из-за блокировок.
Различают следующие типы блокировок:
− по степени доступности данных: разделяемые и исключающие (монопольные);
− по множеству блокируемых данных;
− по способу установки: автоматические и явные.
Монопольные блокировки (X-блокировки, X-Locks - eXclusive locks) - жесткие блокировки без взаимного доступа, устанавливаются только одним пользователем, получающим эксклюзивный доступ к данным. Данный тип блокировки называют блокировкой записи. Объекты, заблокированные такой блокировкой, остаются в монопольном режиме обработки и недоступны для других транзакций до момента окончания работы данной транзакции;
Do'stlaringiz bilan baham: |