В последние несколько дней я поиграл с Oracle * Loader, пытаясь выполнить массовую загрузку данных в Oracle.После опробования различных комбинаций опций я с удивлением обнаружил, что обычная загрузка пути выполняется намного быстрее, чем прямая загрузка пути.
Несколько фактов о проблеме:
- Количество записей взагрузка составляет 60 КБ.
- Количество записей в целевой таблице до загрузки составляет 700 млн.
- Версия Oracle - 11g r2.
- Файл данных содержит дату, символ (ASCII, преобразование не требуется), целое число, число с плавающей запятой.Нет blob / clob.
- Таблица разделена по хешу.Функция хеширования аналогична PK.
- Параллельно таблицы установлено значение 4, а на сервере установлено 16 процессоров.
- Индекс разделен локально.Параллель индекса (из ALL_INDEXES) равна 1.
- В целевой таблице только 1 PK и 1 индекс.Ограничение PK, построенное с использованием индекса.
- Проверка разделов индекса показала, что распределение записей по разделам довольно равномерное.
- Файл данных с разделителями.
- Используется опция APPEND.
- Выбор и удаление загруженных данных через SQL выполняется довольно быстро, почти мгновенно.
При обычном пути загрузка завершается примерно за 6 секунд.
С прямым путемзагрузка, загрузка занимает около 20 минут.Худший запуск занимает 1,5 часа, но сервер вообще не был занят.
Если включен skip_index_maintenance, прямая загрузка пути завершается через 2-3 секунды.
Я пробовал довольно многоопций, но ни один из них не дает заметного улучшения ... НЕОБХОДИМЫЕ, Сортированные индексы, MULTITHREADING (я запускаю SQL * Loader на сервере с несколькими процессорами).Ни один из них не улучшает ситуацию.
Вот событие ожидания, которое я продолжал видеть в течение времени, когда SQL * Loader работает в прямом режиме:
- Событие: последовательное чтение файла БД
- P1 / 2/3: file #, block #, blocks (проверьте по dba_extents, что это индексный блок)
- Класс ожидания: пользовательский ввод / вывод
Кто-нибудьесть идеи, что пошло не так с прямой загрузкой пути?Или я могу еще что-нибудь проверить, чтобы действительно выявить причину проблемы?Заранее спасибо.