#oracle #optimization #insert #bulk-load
Вопрос:
Доброе утро,
В проекте, в котором я участвую, он вставляется в огромные таблицы. Несмотря на отсутствие первичных ключей, они занимают много времени. Что я обычно делаю, так это вставляю данные в простые рабочие таблицы, а затем с помощью обмена переношу данные в большую таблицу, которая разделена.
Мой вопрос в том, если бы вставка была сделана таким образом на большом столе, она бы пошла быстрее?
Insert /* append parallel */
in (select * from hugetable
where 1 = 2)
select * from table2
Спасибо
Комментарии:
1. Ваш пример кода не будет компилироваться, поэтому трудно сказать, будет ли он быстрее. Кроме того, нам трудно ответить на вопросы о производительности, потому что очень многое зависит от точных деталей каждого сценария. Вы не предоставили нам достаточно информации, чтобы сделать обоснованную оценку. Мой общий совет состоял бы в том, чтобы выяснить, почему ваш текущий процесс занимает так много времени, а не исчезать в кроличьей норе, пытаясь найти альтернативу, которая могла бы быть быстрее.
Ответ №1:
Существует множество вариантов замедления скорости вставки. Одним из эффективных вариантов является использование базы данных в режиме архивного журнала, что в основном хорошо. Это действительно делает операторы вставки немного медленнее, и здесь может помочь подсказка добавления. Это происходит потому, что маркер конца таблицы просто помещается в конец данных, которые будут добавлены, и данные просто сохраняются, не проходя через обычные копии, и это экономит время.
Если это поможет, не забывайте, что это влияет на резервное копирование/восстановление вашей базы данных. Вам потребуется создать резервную копию файлов данных, которые участвуют в такой транзакции.
То есть, если ваша база данных находится в режиме архивного журнала, а также включена функция «принудительное ведение журнала», это вам совсем не поможет, потому что база данных проигнорирует подсказку о добавлении. Обычно это происходит потому, что существует резервная база данных, связанная с вашей базой данных, которая хочет, чтобы архивы оставались действительной резервной базой данных.
Параллельная подсказка может сработать, но в большинстве случаев она не поможет. Есть много вещей, которые должны быть правильно настроены, чтобы это работало на вас.
Самое главное-найти первопричину вашей скорости или отсутствия скорости. Если ваше оборудование с трудом вмещает 10 Мбит/с, вы не можете ожидать, что скорость вставки будет выше этой.
Итак, короче говоря, есть общий ответ: это зависит от обстоятельств. Не тот ответ, на который вы надеетесь, но несколько подсказок, которые могли бы указать направление, в котором вы могли бы продолжить расследование.