Обзор экстентов

Статьи про Oracle -> Архитектура

Обзор экстентов

Статья написана на основе официальной документации фирмы Oracle.
Oracle Database Concepts 10g Release 2 (10.2) B14220-02.

v:1.0 23.08.2008

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

Когда выделяются экстенты

Когда Вы создаете таблицу, Oracle выделяет сегменту данных этот таблицы первоначальный экстент (initial extent), который состоит из определенного числа блоков. Хотя в таблице еще нет ни одной строки, блоки данных связаны с первоначальным экстентом, который зарезервирован для будущих записей.

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

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

Определение размера и числа экстентов

Параметры хранения (Storage parameters) выражаются в терминах экстентов, определяемых каждым сегментом. Параметры хранения используются в сегментах всех типов. Они определяют каким образом Oracle будет выделять свободное место для сегмента. Например, Вы можете определить сколько места будет первоначально резервироваться для сегмента данных таблицы или Вы можете задать максимальное число экстентов, которые может занять таблица. Эти параметры задаются в секции STORAGE выражения CREATE TABLE. Если параметры хранения не заданы, то берутся значения по умолчанию.

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

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

  • Фиксированный размер экстента. Вы можете самостоятельно задать размер экстента или оставить значение по умолчанию (1 Мб). Помните, что каждый экстент содержит как минимум пять блоков данных.
  • Системно-управляемый размер экстента. Oracle может самостоятельно определить оптимальный размер дополнительного экстента, минимальный размер 64 Кб. Однако, если табличное пространство создается с 'автоматическим управлением размера сегмента' и если размер блока базы данных 16 Кб и выше, то минимальный размер экстента 1 Мб.

Если табличное пространство управляется локально, то параметры INITIAL, NEXT, PCTINCREASE и MINEXTENTS могут быть заданы только на уровне сегментов. В этом случае первоначальный размер сегмента определяется совокупностью этих параметров. После автоматического расчета первоначального размера сегмента, рассчитывается размер каждого экстента.

Как экстенты выделяются

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

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

Как экстенты высвобождаются

В состав базы данных Oracle входит специальное средство Segment Advisor, которое помогает определить объекты с фрагментированным пространством.

В общем, экстенты сегментов не возвращаются в табличное пространство до тех пор, пока Вы не удалите (используя выражения DROP TABLE или DROP CLUSTER) объект схемы, данные которого хранятся в этих экстентах. Из этого правила есть ряд исключений:

  • Пользователь с правом DELETE ANY или владелец таблицы или кластера выполняет выражение TRUNCATE...DROP STORAGE.
  • Администратор базы данных (DBA) может высвободить неиспользуемые экстенты, применив следующее выражение: ALTER TABLE table_name DEALLOCATE UNUSED;
  • Периодически Oracle высвобождает один или несколько экстентов сегмента отката, если задан параметр размера OPTIMAL.

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

Петрелевич Сергей
petrelevich@yandex.ru

Метки: Oracle Concepts  

Комментарии.

Внимание.
Комментировать могут только зарегистрированные пользователи.
Возможно использование следующих HTML тегов: <a>, <b>, <i>, <br>.