Гость
Форумы / Informix [игнор отключен] [закрыт для гостей] / Использование утилиты dbload / 9 сообщений из 9, страница 1 из 1
01.09.2010, 16:20
    #36824211
Lyudik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование утилиты dbload
Доброго времени суток!

Мне необходимо в программе, написанной на Delphi, загрузить данные из файлика в таблицу Informix. При закачке данных в цикле уходит много времени, так как обрабатывается более 15 000 записей. Вроде как для этих целей можно использовать утилиту dbload, вот только не знаю, как ею пользоваться.

Подскажите, пожалуйста, как пользоваться утилитой dbload?

Заранее большое спасибо.
...
Рейтинг: 0 / 0
01.09.2010, 16:30
    #36824235
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование утилиты dbload
код в студию.

Кстати много времени это сколько? Я программой на делфи 200 тыс за 1,5 мин. грузил в информикс. Это быстро или долго?
...
Рейтинг: 0 / 0
01.09.2010, 16:46
    #36824291
Lyudik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование утилиты dbload
код загрузки в цикле
...
Dbf1.First;
While not Dbf1.Eof do
begin
quLoadData.SQL.Clear;
quLoadData.SQL.Text:= 'insert into provision_new_serv_main (поле1, поле2, поле3, поле4, поле5, поле6, поле7)'
+' values ('
+Dbf1.FieldByName('поле1').AsString+','
+''''+Dbf1.FieldByName('поле2').AsString+''','
+''''+Dbf1.FieldByName('поле3').AsString+''','
+''''+Dbf1.FieldByName('поле4').AsString+''','
+''''+Dbf1.FieldByName('поле6').AsString+''','
+''''+Dbf1.FieldByName('поле7').AsString+''''
+')';
quLoadData.ExecSQL;
Dbf1.Next;
end;
...

загрузка идет приблизительно 10-15 минут
...
Рейтинг: 0 / 0
01.09.2010, 16:54
    #36824310
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование утилиты dbload
самая очевидная ошибка, непрепаренный запрос.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 //quLoadData.SQL.Clear;  не нужно перед Text:= 
quLoadData.SQL.Text:= 'insert into provision_new_serv_main (поле1, поле2, поле3, поле4, поле5, поле6, поле7)'
+' values (:поле1, :поле2, :поле3, :поле4, :поле5, :поле6, :поле7)';
quLoadData.Prepare;

 While   not  Dbf1.Eof  do 
 begin 
quLoadData.Params[ 0 ] := Dbf1.FieldByName('поле1').AsString;
quLoadData.Params[ 1 ] := Dbf1.FieldByName('поле2').AsString;
quLoadData.Params[ 2 ] := Dbf1.FieldByName('поле3').AsString;
quLoadData.Params[ 3 ] := Dbf1.FieldByName('поле4').AsString;
quLoadData.Params[ 4 ] := Dbf1.FieldByName('поле6').AsString;  //поле 5 потерялось? 
quLoadData.Params[ 5 ] := Dbf1.FieldByName('поле7').AsString;
quLoadData.ExecSQL;
Dbf1.Next;
 end ;
...
Рейтинг: 0 / 0
01.09.2010, 16:55
    #36824314
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование утилиты dbload
кстати если закоментировать execsql вы узнаете сколько времени из 10 мин. уходит на чтение dbf
...
Рейтинг: 0 / 0
01.09.2010, 17:52
    #36824491
Lyudik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование утилиты dbload
Спасибо за совет.
Теперь загрузка идет быстрее. 17 335 записей загружаются около 3-х минут, при этом на чтение dbf файла уходит 1 секунда :)
Хотелось бы, чтобы данные загружались еще быстрее.
Преобразование данных dbf файла в unl файл происходит в программе также за 1 с.
код
...
Var Buffer: string;
ListOut: TStringList;
...
While not Dbf1.Eof do
begin
Buffer:= Dbf1.FieldByName('поле1').AsString + '|' +
Dbf1.FieldByName('поле2').AsString + '|' +
Dbf1.FieldByName('поле3').AsString + '|' +
Dbf1.FieldByName('поле4').AsString + '|' +
Dbf1.FieldByName('поле5').AsString + '|' +
Dbf1.FieldByName('поле6').AsString + '|';
ListOut.Add(Buffer);
Dbf1.Next;
end;
ListOut.SaveToFile(UnlPath + 'file.unl');

и я думаю, что если есть возможность использовать утилиту dbload, то при ее использовании данные из файла формата unl в таблицу Informix будут загружаться быстрее :) (уверенности в этом нет, но попробовать можно было бы)
...
Рейтинг: 0 / 0
01.09.2010, 21:40
    #36824742
vasilis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование утилиты dbload
LyudikПодскажите, пожалуйста, как пользоваться утилитой dbload?
А что мешает посмотреть в доку по вашей версии ?
Есть конкретные вопросы или просто ничего не читали ?
http://publib.boulder.ibm.com/infocenter/idshelp/v115/index.jsp - это информация по 11.5
В поле поиска задаете dbload и получите массу ссылок на нужные разделы, от синтаксиса до советов по применению.
...
Рейтинг: 0 / 0
02.09.2010, 11:49
    #36825473
Журавлев Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование утилиты dbload
утилитой dbload не удастся воспользоваться скорее всего, она только без пароля умеет ходить
берите dbaccess и команды connect и load
...
Рейтинг: 0 / 0
03.09.2010, 11:00
    #36827513
olleg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование утилиты dbload
Lyudik
Хотелось бы, чтобы данные загружались еще быстрее.

Может индексы тормозят и их временно отключить?
Код: plaintext
1.
2.
3.
4.
set indexes  for provision_new_serv_main  disabled;
<загрузка>
set indexes  for provision_new_serv_main  enabled;
update statistics for table provision_new_serv_main;

Может есть ненужные триггеры?

А может журналирование мешает?
Код: plaintext
1.
2.
3.
4.
alter table provision_new_serv_main type raw;
<загрузка>
alter table provision_new_serv_main type standard;
update statistics for table provision_new_serv_main;
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Использование утилиты dbload / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]