powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вставка в Firebird посредством Array DML (FireDAC)
23 сообщений из 73, страница 3 из 3
Вставка в Firebird посредством Array DML (FireDAC)
    #39655371
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryVlad F,

Тебе даже конкретный код приводят, где батчсайз по 255 файрдаком режется, нет, всё равно тестишь 256.
Ты что хотел сказать конкретно? Что не нравится? И в чем ценность твоего поста?
Все это я тестировал еще в пятницу, когда мы только обозначили возможные проблемы с контекстами и еще не переходили к коду. Или, я не понял, не нравится на столько подробное исследование?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655374
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

ОК. Сегодня постараюсь проверить в рабочем порядке.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655380
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

хотя... там EB не обязательно по 255 INSERT за один EB делает, может и меньше. Это ещё зависит от длинны самого оператора INSERT
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655433
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Вот именно. И я не думаю, что что-то там принципиально изменится.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655490
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FТы что хотел сказать конкретно? Что не нравится? И в чем ценность твоего поста?В том, что данные по мелким пакетам, пожалуй, бесполезны.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655506
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

в этой реализации да. Если бы внутри не было перепостроения EXECUTE BLOCK и повторного prepare для новой порции данных, то и разницы для пакетов размером > 255 не было бы.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655666
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисVlad F,

попробуй потестить размер пакетов кратный 255. Я думаю там циферки получше выйдут
Денис, как то так опять получается, что это, как предыдущие ваши смелые предположения, оказалось неверным:
255 -> 02:31
510 -> 01:30
1020 -> 01:10
2040 -> 01:00
8160 -> 00:55

P.S. Кстати, как и в первоначально приведенных результатах (забыл сразу про это указать) замеры для каждого значения проводились два раза и бралось лучшее время. Впрочем, девиации при этом почти не было.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655694
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

я вроде всё разжевал, не знаю как ещё можно объяснить.
Для начала нужно трейсом глянуть сколько на вашей задаче влезает в один EXECUTE BLOCK, ну или отладчиком Delphi.
Реально может быть меньше 255. От длины оператора INSERT зависит.

Предположим вы задали размер пакета = 1000 и в EB помещаются 255 операторов.
В этом будет 3 раза выполнен EB c 255 операторами и 1 раз EB c 235 операторами. Итого 4 раза выполнить EB на один пакет.
Если проделать это в цикле 1000 раз, то нам потребуется 2000 раз построить EB, 2000 раз сделать prepare и 4000 раз выполнить EB.

Теперь задаём размер пакета 10000. 39 EB по 255 операторов и 1 EB на 55 операторов. Итого 40 раз выполнить.
Если проделать это в цикле 100 раз, то нам потребуется 200 раз построить EB, 200 раз сделать prepare и 4000 раз выполнить EB.

Как видишь как пакет не увеличивай выполняться EB будет примерно одинаковое количество раз. А вот на prepare и построении EB при увеличении размера пакета можно сэкономить.

Так вот если подобрать размер пакета такой чтобы он был кратен тому что влезает в EB, то вместо 2 построений EB и prepare будет одно. Хотя возможно на фоне остальных затрат это мизер.

Ну и ещё если после вставки каждого пакета ты делаешь commit, то тест не равноценный. 1000 - commit и 100 - commit это и без всякого Array DML тебе разницу даст.

З.Ы. И кстати ты проводил тест на обычном препарированном статменте?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655734
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

Вы не в церкви, вас не обманут (ц)
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655750
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис! Очень прошу, не надо в тридцать третий раз пускаться в одни и те же объяснения.)) Тем более, что я их не просил. Моя ремарка относилась к педпрложениям, что "больше 256 ставить смысла нет" и "на 255 должны быть улучшения". Все.
Хотя на счет неравноценности по коммитам отчасти согласен.
Вопроса про "обычный препарированный", однако, недопонял. Скармливаю ему одиночный параметризированный запрос. Сам его не препарирую, в надежде на то, что перед первым выполнением он его сам отпрепарирует и так и будет использовать, как описано в хелпе.
Хотя какой там использовать, - он же не его на самом деле использует, а внутренний скрытый блок.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655757
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladVlad F,

Вы не в церкви, вас не обманут (ц)
При чем здесь не в церкви, причем не обманут? КТО ЗДЕСЬ?!!
На самом деле я очень оправдался в своих ожиданиях.))
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655783
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

ты всё время пытаешься что-то опровергнуть в этой теме.
Перечитай себя чужими глазами.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655785
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

а вот для меня результат неожиданный. Я не понимаю почему эмуляция Array DML через EXECUTE BLOCK значительно выигрывает у одиночного подготовленного INSERT, который многократно выполняется с разными параметрами и с коммитом раз в 1000-10000 выполнений. Был бы обычный сервер понял бы, а так для embedded нет никаких сетевых обменов
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655803
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Денис, еще не известно, а выыигрывает ли , никто же с одиночным сравнительно не измерял.))) Или измерял?
На самом деле ваш покорный слуга изначально, из общих соображений, предположил, что вроде пачками оно должно быть быстрее. Ну и в любом случае полученные результаты меня более чем устраивают.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655805
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЯ не понимаю почему эмуляция Array DML через EXECUTE BLOCK значительно выигрывает у
одиночного подготовленного INSERT, который многократно выполняется с разными параметрами и
с коммитом раз в 1000-10000 выполнений.

А она выигрывает? Он же не тестировал обычный параметризованный DML, только Array с
разными размерами пачки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655808
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

вот и я думаю что не должно или выигрывает/проигрывает в пределах погрешности.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655863
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пока что увидел только замер эффективности использования execute block кодом FireDAC
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39656641
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эх, Вострикова на вас нету.
он бы намерил...

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39656912
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

я домеряю, решил уже, в рабочем порядке. Может завтра, работать ведь тоже надо. ))
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39656914
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Настоящих буйных мало, вот и нету вожаков (c) ))
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39656967
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийэх, Вострикова на вас нету.
он бы намерил...Его теперь ни на кого нет. Ушел в своё фотоподполье и его теперь оттуда никаким калачом не выманишь.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39657174
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
07.06.2018 1:00, rdb_dev пишет:
> Его теперь ни на кого нет. Ушел в своё фотоподполье и его теперь оттуда никаким калачом не выманишь.

ты ещё/уже был тут когда кого-то на #сказочноебали отправляли?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39658491
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FПривожу результаты тестирования института Array DML (FireDAC) для запросов на вставку.
Тестовая рабочая станция: HP Compaq 8200 Elite CMT PC с дополненным до 8 Гб ОЗУ и оценкой производительности 5.1 по шкале Win7.
Windows 7 Prof x64.
FB 3.0.3.329x64 в режиме embedded. В конфиге изменение только в части Providers=Engine12.
Тестовая таблица-пробник: пара полей варчар(10), по одному типа дата и целое и дюжина нумериков(18,4). Вставляется миллион записей параметризированным запросом.
Показатели времени выполнения в зависимости от значений ArraySize (размерности массива пакетной вставки) в мин/сек, с коммитом после каждой пачки:
128 -> 03:21
256 -> 02:23
512 -> 01:26
1 024 -> 01:09
2 048 -> 01:01
4 096 -> 00:59
8 192 -> 00:54
16 384 -> 00:51
32 768 -> 00:50
Очевидно, что дальнейшее увеличение размер пакета не имеет смысла, а дополнительное возможное увеличение производительности лежит в области распараллеливания процесса вставки. В результате чего, вероятно, можно приблизится (и, не исключено, что и превзойти) озвученные kdv выше показатели "миллион за 25 секунд". Ну и резюмируя, хочу отметить, что FireDAC в целом показал себя с FB очень хорошо и при его штатном наличии в современных версиях среды разработки нет никакого смысла продолжать пользоваться IBX.
Итак, момент истины. Привожу результаты тестирования вставки в точности тех же данных посредством FireDAC без использования ArrayDML. Как и в предыдущем эксперименте замеры производились по два раза, бралось лучшее время. В таблице приведены показатели времени вставки в формате мин:сек в зависимости от числа последовательных запросов между промежуточными коммитами:
1 024 -> 01:22
2 048 -> 01:20
4 096 -> 01:22
8 192 -> 01:21
16 384 -> 01:21
32 768 -> 01:20
Из чего можно сделать пару очевидных выводов:
1) от числа последовательных вставок между коммитами ничего не зависит;
2) вставка посредством Array DML (FireDAC) позволяет получить в Firebired почти 40%-тное преимущество ((80-50)/80*100%=37.5%) над вставкой отдельными запросами, несмотря на использование им в этом режиме эмуляции (execute block), вместо институтов Naitive API, как, например в Interbase.
...
Рейтинг: 0 / 0
23 сообщений из 73, страница 3 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вставка в Firebird посредством Array DML (FireDAC)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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