Скачиваний:
30
Добавлен:
11.04.2015
Размер:
17.36 Кб
Скачать

Вопрос 13. Взаимоблокировки в промышленных СУБД

В соответствии с известным определением взаимная блокировка – это тупиковая ситуация, возникающая в том случае, когда две и более транзакции находятся в состоянии взаимного ожидания освобождения блокировок, удерживаемых каждой из них. В качестве примера возникновения взаимоблокировки рассматривается система, содержащая две базы данных: sale и product, и она поддерживает выполнение двух транзакций R1 и R2. После прохождения нескольких этапов, обе транзакции R1 и R2 находятся в состоянии ожидания: транзакция R1 ожидает снятия блокировки с таблицы sale, которая удерживается транзакцией R2, а транзакция R2 ожидает снятия блокировки с таблицы product, которая удерживается транзакцией R1. Необходимо отметить, что тупиковая ситуация может возникнуть и в том случае , когда две и более транзакции обращаются к одним и тем же строкам таблицы, но в разной последовательности. Кром того предполагается, что в качестве блокирования используется строка. Для выявления тупиковых ситуаций сервер периодически проверяет состояние текущих транзакций с целью обнаружения блокировок, ожидающих своей очереди предоставления ресурса. Такие блокировки фиксируются, и если при повторном опросе они по- прежнему находятся в очереди, то выполняется рекурсивная проверка открытых транзакций на предмет существования в очереди замкнутых циклов. При обнаружении цикла в нем выбирается одна или несколько жертв взаимоблокировок. По умолчанию в качестве жертвы назначается транзакция минимальной длины, т.е. транзакция, для отката которой необходимо выполнить минимальное количество операций. В случае, если разработчик предполагает уменьшить вероятность выбора определенной транзакции в качестве жертвы, то он должен повысить её приоритет.

Вопрос 14. Блокировки устанавливаемые программистами.

Рассмотренные типы блокировок устанавливаются и поддерживаются автоматически диспетчером блокировок. Большинство промышленных СУБД позволяют определить блокировки в прикладных программах. Также блокировки позиционируются как явные и могут устанавливаться только на таблицу в целом, ане на её отдельные строки. Явные блокировки целесообразно использовать при пакетных обновлениях данных в таблицах, например, в случае повышения всем сотрудникам компании оклада на фиксированный процент.

Такое решение позволяет:

- уменьшить затраты на реализацию процедуры блокирования, т. к. блокирование производится только один раз для всей таблицы;

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

- исключить возможность образования тупика.

Для задания явных блокировок применяется следующее SQL – предложение:

LOCK TABLE «имя таблицы »IN {SHARE, EXCLUSIVE} MODE.

Операция SHARE определяет явную блокировку как разделяемую, а опция EXCLUSIVE- как монопольную. Явные блокировки также устанавливаются с помощью оператора.

Вопрос 15. Уровни изоляции транзакций

Классическим требованием, предъявляемым к организации одновременного доступа к данным, является поддержка принципа сериализации транзакций. Это принцип обеспечивает наивысшую степень независимости транзакций, но приводит к низкому уровню параллелизма и, как следствие, к увеличению времени реакции ИС на запросы пользователей. В промышленных СУБД предусмотрена возможность варьирования уровнем взаимного влияния транзакций, который в соответствии со стандартом SQL 92 называется уровнем изоляции транзакций. Известны следующие уровни изоляции.

SERIALIZABLE – уровень сериализации, его использование обеспечивает исключение проблем потерянного обновления, чернового чтения, неповторяемого чтения и возникновения строк- фантомов.

REPEATABLE READ – уровень повторяемого чтения, его использование обеспечивает исключение проблем потерянного обновления, чернового чтения и неповторяемого чтения

READ COMMITTED – уровень чтения завершенных транзакций, его использование обеспечивает исключение проблем потерянного обновления и чернового чтения

READ UNCOMMITTED – уровень чтения незавершенных транзакций, его использование обеспечивает исключение проблемы потерянного чтения.

Вопрос 16. Особенности поддержки уровней изоляции в СУБД Oracle

Соседние файлы в папке ответы