С. И. ТКАЧЕНКО

Московский инженерно-физический институт (государственный университет)

ИССЛЕДОВАНИЕ РАЗЛИЧНЫХ ПОДХОДОВ
В ОРГАНИЗАЦИИ ХРАНЕНИЯ LOB ОБЪЕКТОВ
В СУБД ORACLE

В работе рассматривается влияние различных параметров СУБД ORACLE на эффективность работы с LOB объектами.

В настоящее время большие объемы информации хранятся в различных СУБД, но все чаще СУБД используется не только для хранения текстовой или числовой информации, но и для хранения большого объема двоичной информации (содержимого файлов операционной системы). Такой подход (в рассматриваемом нами случае использования СУБД Oracle) имеет ряд преимуществ:

- количество файлов в директории ОС не рекомендуется делать больше чем тысячу, а СУБД этих ограничений не имеет;

- СУБД ORACLE содержит развитый по сравнению с ОС механизм резервного копирования и восстановления;

- уровень защиты хранящейся под управлением СУБД информации выше, чем в ОС.

Эффективность организации хранения и работы с LOB в БД под управлением СУБД ORACLE определяется типом этих LOB, выбранными параметрами их хранения и настройками конфигурации СУБД.

Цель данной работы - определить рациональные значения параметров конфигурации СУБД ORACLE для различных типовых ситуаций использования наиболее распространенных LOB - Binary LOB (BLOB).

Были определены следующие типичные варианты использования BLOB объектов:

-  требуется обработка небольших объектов до 4000 байт;

-  требуется обработка большого количества объектов размером от 4000 байт до 2-3 Мб;

-  требуется обработка объектов более 3 Мб.

В ORACLE хранение LOB объектов имеет ряд особенностей, на которые обращается особое внимание:

-  если размер LOB объекта больше 4000 байт, то однозначно создается LOB сегмент, в котором будет физически храниться содержимое LOB объекта, а также создается индекс, с помощью которого индексируется содержимое LOB сегмента. В таблицу, содержащую столбец типа LOB, записывается указатель (так называемый LOB локатор), который занимает всего 20 байт и является указателем на область LOB сегмента;

-  если размер LOB меньше или равен 4000 байт, то можно явно указать Oracle, для того чтобы содержимое LOB объекта хранилось вместе с содержимым таблицы;

-  единицей хранения LOB объектов является так называемый CHUNK, а не блок, используемый самой СУБД. Один CHUNK не может использоваться для хранения частей нескольких LOB объектов в отличие от механизма использования блоков, а также можно сделать вывод, что параметры хранения PCTFREE и PCTUSED не имеют никакого значения при использовании LOB [2];

-  существует параметр (PCTVERSION), определяющий какой процент от размера LOB сегмента будет зарезервирован для хранения устаревших LOB страниц, он используется для согласования чтения и записи одного и того же LOB;

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

С учетом вышеизложенного в ходе исследований изучалось влияние (с точки зрения быстродействия выполнения типовых операций с LOB) следующих параметров:

-  размер блока базы данных;

-  варианты распределения по табличным пространствам;

-  размер CHUNK и параметры хранения INITIAL, NEXT и PCTINCREASE;

-  LOGGING и NOLOGGING, PCTVERSION;

-  Различные параметры SGA, связанные с чтением и буферизацией блоков БД;

-  CACHE/NOCACHE/CACHE READS;

-  ENABLE/DISABLE STORAGE IN ROW.

Выполненная работа позволяет сформулировать обоснованные рекомендации по организации хранения и обработки BLOB определенных выше размеров.

Список литературы

1.  Oracle9i Application Developer's Guide - Large Objects (LOBs) Release 2 (9.2).

2.  Oracle для профессионалов. Книга 1 Архитектура и основные особенности. Второе издание. Том Кайт. DiaSoft, М.: Санкт-Петербург: Киев: 2004.