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

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

·  При выполнении пользователем команды DELETE или UPDATE, сервер базы данных обработает команду и проверит, стало ли используемое в блоке данных пространство меньше, чем определено параметром PCTUSED. Если это так, блок станет первым в очереди свободных блоков, доступных для этой транзакции. Когда транзакция будет подтверждена, блок станет доступным и для других транзакций.

Сервер Oracle добавляет блок к списку свободных блоков, когда обнаруживает, что процент заполнения блока меньше значения PCTUSED и исключает блок из списка свободных блоков, когда процент заполнения блока становится больше, чем 100 – PCTFREE (Рисунок 1).

Рисунок 1 Влияние параметров PCTFREE и PCTUSED на добавление данных в блок

Повышение производительности и использования пространства достигается путем установки соответствующих значений параметров PCTFREE и PCTUSED

Параметр

Меньшее значение

Большее значение

PCTFREE

§ более плотное заполнение блоков при вставке строк;

§ для хранения данных требуется меньше блоков;

§ может вызвать миграцию строк.

§ больше места для последующих обновлений;

§ для хранения данных требуется больше блоков;

§ уменьшает миграцию строк.

PCTUSED

§ блоки реже перемещаются в список свободных блоков;

§ увеличивает объем неиспользуемого пространства

§ блоки чаще перемещаются в список свободных блоков;

§ эффективнее используется свободное пространство.

Значения параметров никогда не должны достигать 100%, а сумма значений параметров не должна превышать 100%. Кроме того, если значения параметров PCTFREE и PCTUSED близки, блок будет постоянно удаляться из списка свободных блоков и включаться в него при малейшем изменении содержимого. Этого можно избежать, если оставить между ними зазор, по крайней мере, в 20%.

INITRANS и MAXTRANS

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

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

Особенности управления сегментами

Сегмент представляет собой множество экстентов, выделенных для логической структуры базы данных определенного типа. На сегменты часто ссылаются, как на объекты базы данных.

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

Управление сегментами данных и индексными сегментами

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

Каждый индекс в базе данных Oracle имеет отдельный сегмент индекса, в котором содержатся все его данные. Oracle создает индексный сегмент, когда пользователь выполняет утверждение CREATE INDEX.

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

Управление временными сегментами

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

Следующие SQL утверждения могут потребовать создания временного сегмента:

CREATE INDEX

SELECT

ORDER BY

DISTINCT

GROUP BY

UNION

INTERSECT

MINUS

Кроме того, Oracle создает временные сегменты для временных таблиц и индексов, созданных для временных таблиц.

Oracle выделяет временные сегменты, если это необходимо во время пользовательского сеанса, во временном табличном пространстве пользователя, выполняющего SQL-утверждение. Временное табличное пространство для пользователя задается во время создания пользователя. Если временное табличное пространство для пользователя не определено, временные сегменты для пользователя будут создаваться в табличном пространстве SYSTEM. Параметры хранения временных сегментов наследуются от параметров хранения по умолчанию для табличного пространства, в котором они создаются.

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