Данные БД Oracle логически хранятся в табличных пространствах, а физически – в файлах данных (файлах ОС).
Табличное пространство – логическая область хранения данных в Oracle.
Файлы данных – физические структуры, связанные только с одним табличным
пространством.
Объекты БД, хранящиеся в табличных пространствах, могут физически находиться в нескольких файлах данных.
Существует несколько основных способов выделения дополнительного пространства для БД:
- добавить файл к табличному пространству;
- создать новое табличное пространство;
- увеличить размер существующего файла данных.
В момент создания таблицы (CREATE TABLE…) Oracle автоматически выделяет в соответствующем табличном пространстве сегмент, в котором будут храниться данные этой таблицы.
Управлять распределением и использованием пространства для сегмента данных таблицы можно одним из следующих способов:
a) установлением размера пространства, выделенного для сегмента данных, задавая параметры хранения для этого сегмента;
b) контролем использования свободного пространства в блоках данных, составляющих экстенты сегмента данных (параметры PCTFREE и PCTUSED).
Размер и формат строки
Oracle хранит каждую строку таблицы, содержащую менее 256 столбцов, в одном или нескольких отрезках. Если в один блок данных может быть вставлена целая строка, она хранится в одном отрезке. Если же все данные строки не могут быть вставлены в один блок или при обновлении существующей строки для неё не хватает места, такая строка хранится в нескольких отрезках разных блоков (расщепление строки).
Если таблица имеет более 255 столбцов, строки, содержащие данные столбцов с порядковыми номерами выше 255, расщепляются в пределах одного блока (внутриблоковое расщепление). Отрезки расщеплённой строки соединяются с помощью специального идентификатора, который определяет местоположение отрезка по его адресу. Если строка помещается в пределах одного блока, внутриблоковое расщепление не снижает производительность операций ввода/вывода.
|
Каждый отрезок строки содержит заголовок строки и данные для столбцов, входящих в эту строку.
В целях экономии пространства для столбца с пустым значением хранится только информация о длине (ноль).
Производительность и размер блока данных
Операции ввода/вывода можно разделить на случайные и последовательные. В части хранения данных производительность определяется также способом хранения данных и размером блока.
Количество дисковых операций существенно зависит от способа хранения объектов, которые приложение читает или пишет. Это, в свою очередь, определяет объём и способ организации дискового массива (уровень RAID) для получения требуемой производительности.
Для последовательного чтения размер буфера ввода/вывода ОС должен быть в 2-3 раза выше размера блока БД. Предполагается, что ОС может буферизовать ввод/вывод таким образом, что следующий блок будет прочитан их данного конкретного буфера.
Существует эмпирическая зависимость размера блока от типа приложений – OLTP (приложения оперативной обработки транзакций) или DSS (приложения поддержки принятия решений).
0Kb 2Kb 4Kb 8Kb … 16Kb … 32Kb … 64Kb
|
OLTP DSS
Рекомендации при создании таблиц
Для увеличения производительности ввода/вывода:
1. таблицы следует помещать в отдельное табличное пространство;
2. для минимизации фрагментации следует использовать несколько стандартных размеров экстентов, кратных 5*DB_BLOCK_SIZE;
3. для ускорения последовательных операций чтения следует задать размеры экстентов в соответствии со значением DB_FILE_MULTIBLOCK_READ_COUNT (параметр запрашивается серверным процессом у ОС в каждый цикл чтения при поиске по всей таблице);
4. необходимо рассчитать параметр: (средний размер строки – исходный размер строки)*100%/средний размер строки. PCTFREE должен быть достаточно большим, если столбцы имеют пустые значения сначала, но могут быть изменены в последующем или просто возрастут в результате обновлений;
5. необходимо рассчитать параметр PCTUSED: 100- PCTFREE-(средний размер строки*100/объём пространства данных). Правильно подобранные значения PCTFREE и PCTUSED сокращает время поиска в списке свободных блоков, т.к. увеличивается вероятность обнаружения блока, содержащего требуемы объём свободного пространства.