Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РБД_Ответы.docx
Скачиваний:
14
Добавлен:
17.04.2019
Размер:
6 Мб
Скачать
☆

32. Уровни детализации блокируемых элементов

Уровень детализации

Размер элементов данных, выбранных в качестве защищаемой

единицы для протокола управления параллельностью.

Как правило, в качестве элемента данных выбирается один из перечисленных ниже объектов, размеры которых варьируются от очень крупных до мельчайших.

• Вся база данных.

• Отдельный файл.

• Отдельная страница данных (иногда называемая областью или блоком базы

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

• Отдельная запись.

• Отдельное поле в записи.

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

любой другой транзакции, вплоть до отмены установленной блокировки. С другой стороны, если транзакция выполняет обновление 95% записей файла, то лучше позволить ей заблокировать сразу весь файл и не вынуждать систему выполнять блокировку каждой из его записей в отдельности.

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

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

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

один (или несколько) элемент данных.

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

Иерархия уровней детализации

Существующие уровни детализации блокируемых элементов можно представить в виде иерархической структуры, в которой каждый узел будет представлять элемент данных определенного размера - как показано на рисунке. На этой диаграмме корневой узел представляет всю базу данных, узлы 1-го уровня - это отдельные файлы, а узлы 2-го уровня - страницы. На третьем уровне располагаются узлы, представляющие отдельные записи файлов, а на четвертом - поля этих записей.

Если какой-то из элементов данных блокируется, то автоматически оказываются заблокированными и все его узлы-потомки. Например, если транзакция выполнит блокировку

страницы Страница 2 , то все расположенные в ней записи и их поля также

окажутся заблокированными. Если другая транзакция потребует установления блокировки несовместимого типа для этого же самого узла, СУБД легко определит, что это требование удовлетворить не удастся.

Если некоторая транзакция потребует установить блокировку любого из потомков уже заблокированного узла, СУБД, прежде чем принять решение о возможности удовлетворения

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

до того узла, который представляет запрошенный элемент, - с целью проверки, является ли заблокированным какой-либо из предков требуемого узла. Таким образом, при поступлении запроса на блокировку для записи элемента ЗАПИСЬj СУБД потребуется проверить его родительский узел (Страница 2 ), затем - родительский узел его родительского узла (Файл2) и, наконец, - корневой узел иерархии (База данных) с целью выяснения, не является ли один из них заблокированным. Будет обнаружено, что узел

Сmраница2 заблокирован, следовательно, выполнение запроса следует отклонить.