Oracle 11gR2 загружает несколько файлов: sqldr или внешние таблицы?

У меня есть 471 файл общим объемом около 100 ГБ. Файлы "\t" отдельные, с данными транзакций в следующем формате:

char(10) not null,
char(8) not null,
char(1) not null,
char(4) not null,
number not null,
char(1) not null,
char(1) not null,
char(1) not null,
number not null

Порядок транзакций в файлах важен и должен быть сохранен, в идеале с идентификатором первичного ключа. Сначала я загрузил эти файлы с помощью sqldr, но это занимает очень много времени. Недавно я узнал о внешних таблицах. Со стратегической точки зрения, какой метод лучше? Как работает внешняя таблица? Спасибо.


person anti_ml    schedule 01.01.2012    source источник
comment
Как работает внешняя таблица? Это полностью описано в руководстве: docs.oracle.com/cd/E11882_01/server.112/e22490/et_concepts.htm   -  person a_horse_with_no_name    schedule 02.01.2012
comment
почему sqldr занимает много времени? Попробуйте прямую загрузку и убедитесь, что ваши данные находятся в той же локальной подсети или SAN (или, по сути, не передают данные через небольшой канал по сети, например, сервер в Нью-Джерси, отправляющий данные в базу данных в CA). Некоторые ограничения для прямой загрузки, но НАМНОГО быстрее.   -  person tbone    schedule 02.01.2012
comment
Я подсчитал, что sqldr загружается со скоростью 85 миллионов строк в час. Судя по разговору с одним парнем, это кажется разумным, но он не эксперт. Коммит выполняется каждые 300 тыс. строк. Последовательность оракула генерирует первичный ключ на вставке. Порядок данных важен, и ключ сохраняет порядок. Файлы находятся на диске на том же сервере, что и база данных. Можно ли добиться более высокой скорости?   -  person anti_ml    schedule 02.01.2012


Ответы (1)


Синтаксический анализ записей внешних таблиц и SQL*Loader очень похож, поэтому обычно нет большой разницы в производительности в одном и том же формате записи. Однако внешние таблицы могут быть более подходящими в следующих ситуациях:

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

Однако в следующих ситуациях используйте SQL*Loader для наилучшей производительности загрузки:

  • Вы хотите загрузить данные удаленно.
  • Преобразования данных не требуются, и данные не нужно загружать параллельно.

Для повышения производительности SQL*Loader были сделаны следующие предложения.

  • Не используйте индексы и/или ограничения (первичные ключи) в таблицах загрузки во время процесса загрузки.
  • Добавьте следующий параметр в командную строку: DIRECT=TRUE. Это позволит обойти большую часть обработки РСУБД, используя загрузчик прямого пути вместо обычного загрузчика пути. Однако бывают случаи, когда нельзя использовать прямую нагрузку. Эти ограничения можно найти в Руководстве по утилитам Oracle Server.
  • Используйте данные фиксированной ширины, а не данные с разделителями. Для данных с разделителями каждую запись необходимо сканировать на наличие разделителя.
  • Старайтесь избегать преобразования наборов символов, так как преобразования требуют много времени и ресурсов процессора.
  • Для обычного пути используйте параметры READSIZE и BINDSIZE.
    READSIZE захватывает большие блоки данных за системный вызов чтения. Параметр BINDSIZE указывает размер массива привязки, который, в свою очередь, указывает количество строк, которые будут загружены в пакете.

Источник: http://download.oracle.com/otndocs/products/database/enterprise_edition/utilities/pdf/sql_loader_faq.pdf

person Dennis    schedule 02.01.2012
comment
Это было бы +1, но для использования данных фиксированной ширины. Никто не спрашивает у своего клиента, что с ним починили? - person Ben; 07.01.2012
comment
@FlorinGhita Вы правы, я не уверен, почему Oracle поместил это в свою документацию ... - person Dennis; 08.01.2012
comment
@ben В редких случаях данные фиксированной длины правдоподобны. - person Dennis; 08.01.2012
comment
Данные фиксированной ширины очень распространены на платформах, отличных от Unix и Windows. - person Adam Musch; 10.01.2012