Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL / 25 сообщений из 72, страница 1 из 3
27.05.2017, 09:04:45
    #39460766
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в таблицу MS SQL? Скажем, 100-300 тыс строк
Данные именно из Делфи, в другом месте их нет

построчные инсерты будут тормозить или не очень?
...
Рейтинг: 0 / 0
27.05.2017, 09:26:00
    #39460767
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
Пока ждать ответа с форума -- данные уже давно залились бы :-)
...
Рейтинг: 0 / 0
27.05.2017, 10:25:51
    #39460781
Sevolod
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
andreymx, может в текстовый файл, а потом bulk insert?
...
Рейтинг: 0 / 0
27.05.2017, 12:15:07
    #39460803
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
JaDiПока ждать ответа с форума -- данные уже давно залились бы :-)мне не на один раз
...
Рейтинг: 0 / 0
27.05.2017, 13:49:54
    #39460836
azsx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
http://www.sql.ru/forum/393155/optimizaciya-insert
зы
А о чем речь? Какие данные вставляются, какие индексы, какая скорость вставки, БД на хдд или ссд?
...
Рейтинг: 0 / 0
27.05.2017, 15:01:09
    #39460848
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
andreymx> как наиболее быстро залить данные из Delphi 7
andreymx> (датасет, массив) в таблицу MS SQL? Скажем, 100-300 тыс строк


Пачками. Т.е. либо ArrayDML, либо всякие
вариации BULK-инсерт на стороне сервера.
Компоненты доступа какие используются?

P.S. Хотя ради 300 тыс строк смысла особо
париться нет, если это не очень частая и
критичная по времени операция, конечно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.05.2017, 15:04:01
    #39460849
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
azsx> azsx

Вы бы читали и думали, прежде чем отвечать и ссылки давать.
При чём тут MySQL, если ТСу нужен MSSQL, какая ему дело
до типа носителя данных на сервере (он может его не знать и
это может меняться в ходе эксплуатации) и т.д.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.05.2017, 19:49:17
    #39460910
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
Гаджимурадов Рустам
Пачками. Т.е. либо ArrayDML, либо всякие
вариации BULK-инсерт на стороне сервера.
Компоненты доступа какие используются?


ado или что-то другое бесплатное
...
Рейтинг: 0 / 0
27.05.2017, 20:20:28
    #39460923
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
andreymx> ado

Ну, он ArrayDML сам не умеет, поэтому пачками собирать
запросы до макс.размера стейтмента и пулять на сервер.

andreymx> или что-то другое бесплатное

Ну FireDAC умеет. Умел ли AnyDAC - не помню.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.05.2017, 20:40:54
    #39460926
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
Целевая бд очень нагружена, просят нагружать по минимуму
...
Рейтинг: 0 / 0
27.05.2017, 21:12:44
    #39460933
bk0010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
У MS SQL была утилитка, которая очень резво грузила данные из текстовых файлов (SSIS вроде, давно это было, уже не помню). Соответственно, можно выгрузить данные в текстовый файл, сжать его, отправить на сервер (ftp, smb, http), а на сервере поставить программку, которая примет файл, разархивирует, натравит на него SSIS, вернет результат и приберется за собой. В этом случае придется программировать много (особенно по сравнению с простой загрузкой на сервер), но база будет нагружена минимально.
Второй похожий вариант - сформировать sql с insert-ами, загнать его на сервер и выполнить (тут опасайтесь long transaction, не знаю как эта хрень в MS SQL называется, когда транзакция, выполняемая слишком долго, считается зависшей и откатывается).
...
Рейтинг: 0 / 0
27.05.2017, 22:29:22
    #39460952
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
andreymxЦелевая бд очень нагружена, просят нагружать по минимуму
Загружать по расписанию в ночное время. Загружать порциями. Загружать во временные таблицы. Выделить под загрузку отдельную роль с ограниченными ресурсами и грузить через нее, чтобы другие не тормозили.
...
Рейтинг: 0 / 0
28.05.2017, 00:38:53
    #39460972
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
andreymx> Целевая бд очень нагружена, просят нагружать по минимуму

У тебя это частая нерегулируемая операция или планируемая?
Если второе - то логично вынести её на низконагруженное время,
и соответственно вариации bulk-inserta. Если первое, то пачками.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
28.05.2017, 01:53:10
    #39460986
чччД
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
Разве insert - это тяжелая для сервера операция? Да еще если "параметризованный", и нет тяжелых индексов и триггеров на вставку.
Я думал, проблема в нагрузке на сеть, и нужно побыстрее. А оно вон что. Если сервер нежелательно отвлекать на долгую загрузку, следует инсерты наоборот растянуть во времени, выполнять редко, исходя из требований.
Другое дело - как скоро нужны будут результаты загрузки.
...
Рейтинг: 0 / 0
19.09.2017, 17:54:15
    #39523436
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
работает, уже плюс
очень медленно, минус
16.5 тыс строк заливает минуты 3 и больше
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
//примерчик
  countLoad := 0;
  iStep := 32;

  ADOQuery.SQL.Text := cStr;
  ADOQuery.Prepared := true;
  ADOQuery.ParamCheck := false;

  Screen.Cursor := crSQLWait;
  ExportDS.First;

  if CheckCOMMITMSSQL.Checked then
  begin
    ADOConn.BeginTrans;
  end;

  while (not ExportDS.Eof) do
  begin
      for i := 0 to countFields-1 do
      begin
        ADOQuery.Parameters[i].Value := arrFields[i].Value;
      end;
      ADOQuery.ExecSQL;
      inc(countLoad);
      if  countLoad mod SpinEditCOMMITMSSQL.Value = 0)
      then begin
        ADOConn.CommitTrans;
        ADOConn.BeginTrans;
      end;

    ExportDS.Next;
  end; // конец цикла обработки данных

  ADOConn.CommitTrans;

в ADOQuery - обычный рядовой инсерт с параметрами
arrFields - массив выбранных TField


В Оракл через ArrayDML заливает за секунду
Инфоpмация
----------
Данные записаны в БД , таблица "TMP_1"
Количество записанных строк: 16845
Время закачки: 0,807 с.
...
Рейтинг: 0 / 0
19.09.2017, 18:00:09
    #39523440
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
это само собой
Код: pascal
1.
2.
  ExportDS.DisableControls;
  ExportDS.AfterScroll := Nil;
...
Рейтинг: 0 / 0
19.09.2017, 18:00:52
    #39523441
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
andreymx
Код: pascal
1.
 ExportDS.First;


С гридом случайно не связан? Курсор не бегает при этом по нему?
...
Рейтинг: 0 / 0
19.09.2017, 18:00:55
    #39523442
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
andreymx,

Гм, не совсем помню, как там в MSSQL, но кажется стартовать/коммитить транзакцию на каждый чих - излишество.
...
Рейтинг: 0 / 0
19.09.2017, 18:01:43
    #39523443
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
DarkMasterandreymx,

Гм, не совсем помню, как там в MSSQL, но кажется стартовать/коммитить транзакцию на каждый чих - излишество.там не на каждый чих, а на порцию
...
Рейтинг: 0 / 0
19.09.2017, 18:02:25
    #39523444
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
andreymx,

А нет, сорри, поторопился, не усмотрел счетчик "записей в пачке"...
...
Рейтинг: 0 / 0
19.09.2017, 18:02:54
    #39523445
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
если отключить ADOQuery.ExecSQL;, то Время закачки: 0,707 с.
...
Рейтинг: 0 / 0
19.09.2017, 18:03:41
    #39523447
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
andreymxэто само собой
Код: pascal
1.
2.
  ExportDS.DisableControls;
  ExportDS.AfterScroll := Nil;


Поиграйся с настройками курсора и направления.
...
Рейтинг: 0 / 0
19.09.2017, 18:04:38
    #39523449
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
wadmanandreymxэто само собой
Код: pascal
1.
2.
  ExportDS.DisableControls;
  ExportDS.AfterScroll := Nil;



Поиграйся с настройками курсора и направления.
Тот же ltBatchOptimistic
...
Рейтинг: 0 / 0
19.09.2017, 18:06:09
    #39523451
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
wadman,

там обычный инсерт
думаешь, может помочь?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
INSERT INTO DBO.TMP_ (
checked,
bs_type,
bs_category,
name_old,
OWNEDBYORGANIZATION,
id_old,
SERVICEID,
DISPLAYNAME_old,
DISPLAYNAME,
lord,
lord_fio,
Service_TechicalManager,
priority,
status,
AVAILABILITYSCHEDULE,
notes,
grp2,
grp2l,
grp3,
grp3l,
tech_manager
)
VALUES
(
:checked,
:bs_type,
:bs_category,
:name_old,
:OWNEDBYORGANIZATION,
:id_old,
:SERVICEID,
:DISPLAYNAME_old,
:DISPLAYNAME,
:lord,
:lord_fio,
:Service_TechicalManager,
:priority,
:status,
:AVAILABILITYSCHEDULE,
:notes,
:grp2,
:grp2l,
:grp3,
:grp3l,
:tech_manager
)

...
Рейтинг: 0 / 0
19.09.2017, 18:13:47
    #39523453
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
Инфоpмация
----------
Данные записаны в БД, таблица DBO.TMP_sap
Количество записанных строк: 16845
Время закачки: 212,748 с.
Скорость закачки: 79 строк/сек, 1663 полей/сек
Дата: 19.09.2017 18:11:59

Код: pascal
1.
2.
3.
4.
5.
6.
7.
  object ADOQuery: TADOQuery
    AutoCalcFields = False
    CacheSize = 500
    Connection = ADOConn
    LockType = ltBatchOptimistic
    CommandTimeout = 300
  end
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL / 25 сообщений из 72, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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