Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
76-86.docx
Скачиваний:
4
Добавлен:
24.09.2019
Размер:
1.03 Mб
Скачать
  1. Процесс разбиения страницы.

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

По мере ввода в дерево новых данных происходит заполнение узлов, в результате чего в узлах в конечном итоге больше не остается свободного места и требуется их разбиение. Поскольку в СУБД SQL Server узел индекса представлен в виде страницы, то вместо указания на то, что происходит разбиение узла, принято применять термин разбиение страницы. Процесс разбиения страницы показан на рис.

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

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

О создание новой страницы;

О перенос части строк с существующей страницы на новую страницу; О добавление новой строки к одной из страниц;

О добавление еще одной строки в родительский узел.

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

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

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

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

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

Следует отметить, что в индексах SQL Server узлы дерева представлены в форме страниц а сами индексы имеют древовидную структуру которая включает корневой узел, узлы уровней, отличных от листового, и узлы листового уровня

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