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

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


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

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

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


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

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

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

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

У тебя это частая нерегулируемая операция или планируемая?
Если второе - то логично вынести её на низконагруженное время,
и соответственно вариации bulk-inserta. Если первое, то пачками.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
    #39460986
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разве insert - это тяжелая для сервера операция? Да еще если "параметризованный", и нет тяжелых индексов и триггеров на вставку.
Я думал, проблема в нагрузке на сеть, и нужно побыстрее. А оно вон что. Если сервер нежелательно отвлекать на долгую загрузку, следует инсерты наоборот растянуть во времени, выполнять редко, исходя из требований.
Другое дело - как скоро нужны будут результаты загрузки.
...
Рейтинг: 0 / 0
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
    #39523436
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
работает, уже плюс
очень медленно, минус
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
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
    #39523440
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это само собой
Код: pascal
1.
2.
  ExportDS.DisableControls;
  ExportDS.AfterScroll := Nil;
...
Рейтинг: 0 / 0
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
    #39523441
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymx
Код: pascal
1.
 ExportDS.First;


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

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

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

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


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



Поиграйся с настройками курсора и направления.
Тот же ltBatchOptimistic
...
Рейтинг: 0 / 0
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
    #39523451
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
    #39523453
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инфо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
25 сообщений из 72, страница 1 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / как наиболее быстро залить данные из Delphi 7 (датасет, массив) в MS SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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