Загрузчик Oracle SQL *, работающий в прямом режиме, намного медленнее, чем обычная загрузка пути

В последние несколько дней я играл с Oracle SQL * 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_main maintenance включен, загрузка по прямому пути завершается за 2-3 секунды.

Я перепробовал множество вариантов, но ни один из них не дал заметного улучшения ... НЕВЕРТИМО , Сортированные индексы, многопоточность (я использую загрузчик SQL * на многопроцессорном сервере). Ни один из них не улучшает ситуацию.

Вот событие ожидания, которое я наблюдал, пока SQL * Loader работал в прямом режиме:

  • Событие: последовательное чтение файла базы данных
  • P1 / 2/3: номер файла, блок #, блоки (проверьте с помощью dba_extents, что это индексный блок)
  • Класс ожидания: пользовательский ввод-вывод

Кто-нибудь знает, что пошло не так с загрузкой прямого пути? Или есть что-нибудь, что я могу дополнительно проверить, чтобы действительно докопаться до основной причины проблемы? Заранее спасибо.

5
задан APC 17 August 2011 в 09:01
поделиться