Имя: Пароль:
1C
1С v8
Выгрузка из sql большого числа записей.
,
0 Сергиус
 
21.10.11
12:47
Нужно выгрузить данные напрямую из базы sql(число записей порядка 2.000.000). Делаю таким образом:

Cmd = New COMОбъект("ADODB.Command");
Cmd.ActiveConnection = Соединение;

Cmd.CommandText = "Select * from Prices";

ФайлДляВыгрузки = Новый ТекстовыйДокумент;

Выборка = Cmd.Execute();
   
Пока НЕ Выборка.EoF цикл
 
 ФайлДляВыгрузки.ДобавитьСтроку(<Здесь данные из выборки добавляю>);  

 Выборка.MoveNext();
       
КонецЦикла;

ФайлДляВыгрузки.Записать(ИмяФайла,КодировкаТекста.ANSI);

На мощном сервере все это занимает более 8 часов..Вот думаю, каким образом можно все это убыстрить, куда копать?
1 mikecool
 
21.10.11
12:48
скуль сам может сохранять выборку в файлы, делает достаточно быстро
2 mikecool
 
21.10.11
12:48
ТекстовыйДокумент тормоз еще тот
3 shuhard
 
21.10.11
12:50
(0) открываешь BOL
вкуриваешь DTS
настраиваешь
4 shuhard
 
21.10.11
12:52
(3) + 1
целевой форум здесь:
sql.ru
5 izekia
 
21.10.11
12:58
(2) +1 лучше к строке прибавлять
6 izekia
 
21.10.11
13:00
+(5) или еще лучше последовательная запись текста, все равно в файл
7 rs_trade
 
21.10.11
13:01
(0) если разовая выгрузка, запусти из скуля экспорт
8 shuhard
 
21.10.11
13:02
(7) да и не разовую автоматизировать средствами сиквела не вопрос
9 rs_trade
 
21.10.11
13:03
(8) DTS сильно быстро не вкуришь.
10 H A D G E H O G s
 
21.10.11
13:06
ЗаписьТекста
11 H A D G E H O G s
 
21.10.11
13:06
На пару порядков быстрее
12 Сергиус
 
21.10.11
13:07
(6)т.е. лучше использовать ЗаписьТекста чем ТекстовыйДокумент?

реально быстрее будет?

Напрямую из sql не получится выгрузить..эти данные еще необходимо долнить кое-чем из базы 1с..
13 Сергиус
 
21.10.11
13:09
(10) будем пробовать..

А как считаешь - лучше сделать выборку из sql,последовательно ее перебрать, обрабатывая данными 1с или же

выгрузить из sql в какой то файл, и уже по нему проходится циклом?
14 shuhard
 
21.10.11
13:10
(13) лучше всего загрузить на сиквел нужные данные, связать запросом и выгрузить средствами SQL
15 ptiz
 
21.10.11
13:12
(12) Быстрее - зуб даю!
16 ptiz
 
21.10.11
13:13
Ты бы и сам понял причину, если бы вставил в статус счетчик строк.
17 Сергиус
 
21.10.11
13:15
(16)не очень понял, пояснишь?
18 ptiz
 
21.10.11
13:17
(17) Он бы увидел, что сначала выгрузка идет быстро, а потом резко замедляется.
19 izekia
 
21.10.11
13:20
(17) угу, текстовый документ - это совсем не стрингбилдер ... он так же прибавляет к строке, и соответственно просто копирует эту строку постоянно
20 H A D G E H O G s
 
21.10.11
13:23
ТекстовыйДокумент - копит строку и постоянно перераспределяет ее в блоках память (все время надо больший блок). Это дико медленно.
Проще постоянно сбрасывать на диск через ЗаписьТекста, с учетом кэша диска и кэша записи винды (а есть ли он?) это быстрее.
21 H A D G E H O G s
 
21.10.11
13:24
v8: Мозгокруты от 1С
вся ветка, ну и

пост 18
22 Сергиус
 
21.10.11
13:40
А как Выборку из ADODB запихнуть в какой то файл?

В строке запроса как то явно указать?