Фрагментация БД   Фрагментация блоков данных   Сегментная фрагментация   Миграция строк   Цепочки строк
  
Фрагментация табличного пространства

Назад


Вследствие неупорядоченного и запланированного удаления и повторного создания объектов базы данных, внутри табличного пространства оно фрагментируется. Если возникают фрагменты свободного пространства между используемыми экстентами, то образуется фрагментация табличного пространства [2].


Причина появления фрагментации табличного пространства


Фрагментация табличного пространства появляется, когда удаляется одна или несколько таблиц и вместо этих таблиц не возможно добавить новые таблицы, из-за того что, размер новой таблицы больше размера свободного пространства.
Например, в табличном пространстве есть шесть таблиц: фамилия, институт, факультет, специальность, адрес. Каждый объект занимает один экстент размером 5Мбайт (см. рис. 1), эти объекты расположены таким образом

Фрагментация табличного пространства
Рис. 3. Фрагментация табличного пространства


В конце табличного пространства есть свободный экстент размером 5Мбайт. Если необходимо поместить таблицу факультет в другое табличное пространство, в результате у нас образуется свободная зона размером 5Мбайт внутри табличного пространства. Если необходимо создать новую таблицу размером 5Мбайт или меньше, то у нас никаких проблем не будет, а если надо создать две таблицы размер 1 таблицы 10Мбайт, а 2 5Мбайт то это не возможно (см. рис. 2), потому что каждый экстент имеет размер 5Мбайт и общая сумма свободного пространства 10Мбайт [2].

Фрагментация табличного пространства
Рис. 4. Перемещение двух таблиц.


На самом деле табличное пространство выглядит не так. Это обозначает, что в табличном пространстве существуют свободные зоны или экстенты и их размер может отличаться друг от друга (см. рис. 3). Проблема указанная выше говорит о том, что есть свободные экстенты, но их размер меньше размера новой таблицы, которую мы хотели переместить ее в табличном пространстве. Самый простой способ для решения этой проблемы копирование всех объектов в переменное табличное пространство, после этого удаление всех объектов из табличного пространства, а затем импортировать их обратно. Таким образом, мы не только объединяем свободные фрагменты, но и объединяем все объекты в один экстент [2].

Фрагментация табличного пространства
Рис. 5. Вид табличного пространства


Методы обнаружения фрагментации табличного пространства


Таблица свободных экстентов содержит ровно одну строку для каждого свободного экстента, С помощью внимательного изучения ссылок на файлы и номера блоков совместно с информацией о размерах экстентов можно определить существует фрагментация табличного пространства или нет и если да, то ее тип. Можно получить, комбинируя таблицу свободных экстентов и таблицу используемых экстентов sys.uet$ (used extent table) [4].
Пример такого запроса в файле table1.zip.


Влияние фрагментации табличного пространства на производительность


На практике, фрагментация табличного пространства исключительно редко влияет на производительность. Если негативное влияние имеется, оно может быть устранено регулированием параметров хранения или настройкой приложения [4].

Решение проблемы фрагментации табличного пространства

Фрагментация табличного пространства может быть устранена на уровне приложения или на уровне базы данных. На уровне приложения необходимо сосредоточить внимание на установке параметров хранения объекта (например, использование стандартных размеров экстентов) и правильной практике кодирования (например, использование оператора truncate вместо drop/create) [4]. Единственным путем устранить фрагментации табличного пространства является физическое перемещение сегментов Oracle. Это может быть выполнено различными путями, но основной стратегией является перемещение сегментов из фрагментированного табличного пространства, дефрагментация табличного пространства и перемещение сегментов обратно в исходное табличное пространство [4].

Сначало

Назад