Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Быстрые INSERTы  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
Многоуважаемые знатоки, посоветуйте плз,
какими способами можно ускорить выполнение кучи последовательных инсертов скриптом в одну таблицу?
5 июн 09, 14:42    [7270136]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
bulk
5 июн 09, 14:44    [7270149]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
+ индексы можно отрубить
5 июн 09, 14:45    [7270156]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
Andrey.L
Member

Откуда: Харьков
Сообщений: 1546
pravednik,

+ констрейнты, триггера отрубить
5 июн 09, 14:46    [7270162]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
Серафимный Шестикрыл
Member [заблокирован]

Откуда: С луны свалился
Сообщений: 2922
SQLap
какими способами можно ускорить выполнение кучи последовательных инсертов скриптом в одну таблицу?


Подумай об direct-path insert.
5 июн 09, 14:48    [7270182]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
Eliska
Member

Откуда:
Сообщений: 19
если используется при вставке последовательность -
ее стоит кэшировать - быстрее будет вставка
alter sequence myseq cache 1000000;
(потом можно вернуть как было)
5 июн 09, 14:59    [7270247]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
Всем спасибо за ответы. Индексов (триггеров, констрейнтов) на таблице нет. Просто заинтересовало, насколько куча инсертов может тягаться по производительности с SQL*Loader'ом. Так уж сложилось, что нормального доступа к рабочему серверу у меня нет, т.е. sqlldr запустить не могу. Решил извратиться. Написал конвертер CSV-шников в insert-овые скрипты. На малых количествах (тыщ пять записей) работает сносно, но из чувства спортивного интереса охота вот узнать, может есть какое волшебное слово, может хинт какой, чтобы в логи данные не толкались (они там не нужны), чтобы если возникнет необходимость, мог бы смело и десятки тысяч в свой конвертер толкать.
BULK - это ведь именно концепция SQL*Loaderа, правильно я понимаю?
5 июн 09, 15:01    [7270260]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
Серафимный Шестикрыл
SQLap
какими способами можно ускорить выполнение кучи последовательных инсертов скриптом в одну таблицу?


Подумай об direct-path insert.


ОК, попробую сочетание NOLOGGING c хинтом APPEND
5 июн 09, 15:12    [7270330]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
Elic
Member

Откуда:
Сообщений: 29987
SQLap
нормального доступа к рабочему серверу у меня нет, т.е. sqlldr запустить не могу.
А его необязательно там запускать
5 июн 09, 15:14    [7270350]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
SQLap
Member [заблокирован]

Откуда:
Сообщений: 34063
Elic
SQLap
нормального доступа к рабочему серверу у меня нет, т.е. sqlldr запустить не могу.
А его необязательно там запускать


Ну нету у меня его на клиенте в BINе, что поделать Требования корпорации
5 июн 09, 15:17    [7270369]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
Doctor013
Member

Откуда: Москва
Сообщений: 79
Если есть FTP-доступ - подключай файлы, как внешние таблицы.
5 июн 09, 15:40    [7270525]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
Серафимный Шестикрыл
Member [заблокирован]

Откуда: С луны свалился
Сообщений: 2922
SQLap

ОК, попробую сочетание NOLOGGING c хинтом APPEND


прочти
5 июн 09, 16:27    [7270796]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
alter session set cursor_sharing = force перед выполнением надо не забыть.
6 июн 09, 01:11    [7272256]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
cursor_sharing
Guest
Деев И.
alter session set cursor_sharing = force перед выполнением надо не забыть.
А можно подробнее?
6 июн 09, 02:21    [7272326]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
Если у вас в скрипте есть голый набор INSERT'ов, которыми вставляется множество данных, каждый из них разбирается по полной программе (hard parsing), а это занимает много времени. Установка cursor_sharing в force позволяет избежать этого утомительного для сервера занятия для похожих SQL-операторов.
Статья по теме.
6 июн 09, 10:15    [7272451]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
сursor_sharing
Guest
Деев И.
Если у вас в скрипте есть голый набор INSERT'ов, которыми вставляется множество данных, каждый из них разбирается по полной программе (hard parsing), а это занимает много времени. Установка cursor_sharing в force позволяет избежать этого утомительного для сервера занятия для похожих SQL-операторов.
Статья по теме.
Ааа, ну это понятно. Мне почему-то думается, что мало кто так делает, все уж обчитались про bind переменные. А еще можно использовать bulk insert'ы, там уж совсем эта проблема не страшна. Просто я подумал, что есть какое-то особое секретное знание по поводу cursor_sharing - чтобы быг какой обойти или еще чего.
6 июн 09, 15:05    [7272785]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 63986
Блог
SQLap
чтобы если возникнет необходимость, мог бы смело и десятки тысяч в свой конвертер толкать.

Десятки тысяч в принципе и без ускорений пройдут за обозримое время.

SQLap
BULK - это ведь именно концепция SQL*Loaderа, правильно я понимаю?

Не совсем. Есть array dml - это то, что, например, делает forall. Есть direct path - это то, что делает /*+append*/. SQL*Loader может работать в обоих режимах.
6 июн 09, 15:32    [7272815]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
Guestoo
Guest
Если таблица с NOLOGGING, то админ вдруг начинает говорить матом.
7 июн 09, 17:16    [7274154]     Ответить | Цитировать Сообщить модератору
 Re: Быстрые INSERTы  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9890
softwarer
array dml ... direct path

Кто-то даже сравнил их на современном (v 10) Oracle в Delphi форуме.
Получились удивительные для меня результаты. Я ожидал direct path в
разы (ну хотя бы в 2) быстрее. А там, чуть ли не наоборот ... При том,
что array dml и гибче и естественнее для OCI юзера.
7 июн 09, 20:31    [7274353]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить