С. И. ТКАЧЕНКО
Московский инженерно-физический институт (государственный университет)
ИССЛЕДОВАНИЕ РАЗЛИЧНЫХ ПОДХОДОВ
В ОРГАНИЗАЦИИ ХРАНЕНИЯ 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.


