Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

Совместная работа PCTFREE и PCTUSED

 

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

Пространство для обновления во вновь выделяемом блоке:

 

 

Обновление существующих данных может использовать всё доступное пространство блока, оно может сделать свободное пространство в блоке меньше, чем зарезервированное PCTFREE.

Для каждого сегмента данных и индексов Oracle ведёт список свободных блоков, имеющих свободное пространство больше, чем PCTFREE. Блок перемещается в начало списка свободных блоков и становится первым доступным для использования, если свободное пространство стало меньше, чем PCTUSED.

Свободное пространство в блок возвращают команды DELETE и UPDATE. При этом освобождённое пространство необязательно непрерывно. Пространство объединяется только в том случае, когда свободного пространства в блоке достаточно, чтобы поместить туда результат команды, но это пространство фрагментировано.

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

Естественно, если сумма значений PCTFREE и PCTUSED слишком близка к 100, то блоки будут включаться в список свободных и исключаться из него очень часто.

Самым эффективным способом вернуть в работу пространство, занятое в таблице удалёнными строками – вывести таблицу из работы и реорганизовать.

 

Расщеплённые и мигрирующие строки

 

Расщеплённая строка – строка, части которой находятся в разных блоках данных.

Для расщеплённых строк создаются цепочки блоков. Идентификатор строки (ROWID) и столбцов этой части строки хранятся в заголовке блока.

Мигрирующая строка – строка, которая перемещена в другой блок. Эта проблема может быть связана с выбором PCTFREE, а также размером блока.

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

Экстенты

 

Экстент – логическая единица БД, состоящая из непрерывного набора блоков.

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

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

Если блоки начального экстента сегмента заполняются, Oracle автоматически выделит дополнительный экстент для этого сегмента.

Дополнительный экстент – это следующий экстент того же или большего размера.

Из соображений оптимизации хранения, каждый сегмент БД содержит блок заголовка сегмента, который описывает характеристики этого сегмента и директорию (список) его экстентов.

 

 

Рис. 2. Выделение экстентов