Управление пространством в базе данных. Выделение, освобождение и размер экстентов, страница 2

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

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

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

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

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

Освобождение экстентов

Экстенты в табличном пространстве обычно освобождаются только при удалении сегментов, для которых они были выделены. Исключение составляют сегменты отката, для которых задан параметр OPTIMAL. Если размер сегмента отката больше оптимального и сегмент отката содержит свободные экстенты, лишние экстенты освобождаются автоматически.

При сокращении сегмента данных вследствие выполнения пользователем таких SQL команды DELETE, освобождения экстентов не происходит. Это связано с тем, что пространство ниже маркера максимального уровня заполнения не может быть освобождено командой языка манипулирования данными. Маркер максимального уровня (high water mark)заполнения определяет объем пространства, которое когда-либо было использовано объектом. Чтобы освободить все экстенты сегмента данных, кроме начальных, необходимо выполнить соответствующую команду языка определения данных TRUNCATE TABLE или TRUNCATE CLUSTER, которая перемещает маркер максимального уровня заполнения объекта.

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

ALTER INDEX имя_индекса DEALLOCATE UNUSED – для сегментов индексов

ALTER CLUSTER имя_кластера DEALLOCATE UNUSED – для сегментов, содержащих данные кластера

ALTER TABLE имя_таблицы DEALLOCATE UNUSED – для сегментов, содержащих данные таблицы

ALTER ROLLBACK SEGMENT имя_сегмента_отката SHRINK TO размер – для сегментов отката

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

Размер экстентов

Локально управляемое табличное пространство

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

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

·  Для унифицированных экстентов Вы можете задать размер экстента или использовать размер по умолчанию, равный 1 Мб. Временное локально управляемое пространство может иметь только унифицированные экстенты.

Табличное пространство, управляемое по словарю

Для табличного пространства, управляемого по словарю, управлять выделением экстентов Вы можете с помощью параметров хранения (storage parameter) для отдельных объектов или параметров хранения по умолчанию для табличных пространств. Таким образом, Вы можете управлять выделением экстентов для сегментов.

Следующие параметры хранения оказывают влияние на размер сегмента:

Параметр

Описание

INITIAL

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

NEXT

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

MAXEXTENTS

Общее число экстентов, включая начальный, которые сервер Oracle может выделить для сегмента. Минимальное значение – 1. Максимальное значение и значение по умолчанию зависят от операционной системы

UNLIMITED

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

MINEXTENTS

Общее число экстентов, выделяемых при создании сегмента (по умолчанию 1 для сегментов индексов и сегментов данных, 2 – для сегментов отката)

PCTINCREASE

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

OPTIMAL

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

FREELIST GROUPS

Число групп списков свободных блоков, используемых экземплярами параллельного сервера (по умолчанию – 1). Каждая группа использует один блок данных

FREELISTS

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