|
|
|
Очень большой Insert
|
|||
|---|---|---|---|
|
#18+
Гуру, помогите ! Делаю перекачку таблицы из одной базы в другую. Нужно произвести небольшие операции над полями, поэтому ALTER TABLE не использую. Все делается через INSERT from SELECT В исходной таблице около 3 млн. записей. (размер около 3 Gb) Так вот - такое чувство, что сервер где-то имеет "тормоз". Я перепробовал разные алгоритмы - и через select, и через fetch (с единичными Insert) - скорость выполнения одинаковая !!! На компьютере 2xXeon 700, 1Gb RAM время копирования - больше 6 часов (или около 150 зап/сек) Не подскажете - где копать и куда глядеть ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2002, 18:11:25 |
|
||
|
Очень большой Insert
|
|||
|---|---|---|---|
|
#18+
Вы работаете через ADO? Через него медленно получается 50-200 вызовов в сек. Может код перекачки сделать на Transact SQL и обрабатывать за один раз по несколько тыс. записей? Можно несного повысить скорость обработки, если открыть транзакцию и в конце кода закрыть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2002, 09:52:07 |
|
||
|
Очень большой Insert
|
|||
|---|---|---|---|
|
#18+
У меня то же были подобные проблемы, но решил просто ... т.к. это не требовало постоянного решения, то копировали такие таблицы порциями примерно по 10000 записей ... работало все Значительно быстрей ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2002, 10:15:25 |
|
||
|
Очень большой Insert
|
|||
|---|---|---|---|
|
#18+
А почему не используете BULK INSERT или BCP? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2002, 10:17:14 |
|
||
|
Очень большой Insert
|
|||
|---|---|---|---|
|
#18+
2bantik INSERT вставляет одну запись или сразу все? Напишите подробнее, что Вы делаете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2002, 11:32:04 |
|
||
|
Очень большой Insert
|
|||
|---|---|---|---|
|
#18+
Интуитивно натолкнулся на такую вещь - поскольку и таблица источник, и таблица приемник большие и содержат больше 10-ти индексов - наверное у оптимизатора на этом "съезжает крыша". Внутри тела хранимой процедуры сделал узкую временную таблицу (без индексов) и заполняю ее из источника (с преобразованием данных). Затем из временной одним insert в таблицу-приемник (вот там уже пусть SQL индексы строит). Скорость вполне приемлемая - 5 млн записей за 45 минут. На размер tempdb пока не обращаю внимание :-) p.s. Никакого ADO - только одна хранимая процедура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2002, 16:16:28 |
|
||
|
Очень большой Insert
|
|||
|---|---|---|---|
|
#18+
Снеси индексы на таблице получателе и копируй используя DTS, после копирования создай индексы заново. При чем подправь DTS пакет ручками перед запуском, поставь в Options'ах Transform Data Task - Table Lock и Insert Batch Size 3000-20000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2002, 18:36:36 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32062151&tid=1819278]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 407ms |

| 0 / 0 |
