Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnik.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
5.62 Mб
Скачать

Управление параллельным выполнением при использовании индексных структур

Задача управления параллельным доступом к индексной структуре может быть решена таким образом, что каждая страница индекса рассматривается как элемент данных и применяется описанный выше протокол двухфазной блокировки. Но поскольку вероятность частого обращения к индексам весьма велика, особенно если речь идет о верхних уровнях древовидных индексов (так как поиск в индексе выполняется от его корня к листьям), такая простая стратегия управления параллельным выполнением может привести к высокой конкуренции за блокировки. Поэтому для индексов требуется более эффективный протокол блокировки. Изучение порядка прохождения по элементам древовидных индексов позволяет сделать следующие выводы:

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

  • После вставки в лист-узел нового значения индекса (ключа и указателя) изменения в узлах верхних уровней возникают только после окончательного заполнения этого лист-узла. Это означает, что исключительная блокировка лист-узла устанавливается, только если в него должно быть вставлено новое значение индекса, а исключительная блокировка узлов верхнего уровня требуется, если в лист-узле больше нет свободного места и он должен быть разделен на два.

На основе этих выводов может быть предложена следующая стратегия блокировки индекса:

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

  • При выполнении операций вставки могут применяться консервативный и оптимистический подходы.

Первый (консервативный) из них предусматривает установку исключительных блокировок на всех узлах по мере прохождения от корневого узла дерева к лист-узлу, в котором должны быть внесены изменения. Такой подход обеспечивает возможность при разделении лист-узла внести соответствующие изменения в узлы, расположенные вдоль пути к нему вплоть до корневого узла дерева. Но если оказывается, что дочерний узел не заполнен, блокировка, установленная на родительском узле, может быть освобождена.

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]