|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
WildSeryVlad F, Тебе даже конкретный код приводят, где батчсайз по 255 файрдаком режется, нет, всё равно тестишь 256. Ты что хотел сказать конкретно? Что не нравится? И в чем ценность твоего поста? Все это я тестировал еще в пятницу, когда мы только обозначили возможные проблемы с контекстами и еще не переходили к коду. Или, я не понял, не нравится на столько подробное исследование? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 09:52 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денис, ОК. Сегодня постараюсь проверить в рабочем порядке. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 09:57 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, хотя... там EB не обязательно по 255 INSERT за один EB делает, может и меньше. Это ещё зависит от длинны самого оператора INSERT ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 10:06 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денис, Вот именно. И я не думаю, что что-то там принципиально изменится. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 11:26 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FТы что хотел сказать конкретно? Что не нравится? И в чем ценность твоего поста?В том, что данные по мелким пакетам, пожалуй, бесполезны. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 12:19 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
WildSery, в этой реализации да. Если бы внутри не было перепостроения EXECUTE BLOCK и повторного prepare для новой порции данных, то и разницы для пакетов размером > 255 не было бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 12:31 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов ДенисVlad F, попробуй потестить размер пакетов кратный 255. Я думаю там циферки получше выйдут Денис, как то так опять получается, что это, как предыдущие ваши смелые предположения, оказалось неверным: 255 -> 02:31 510 -> 01:30 1020 -> 01:10 2040 -> 01:00 8160 -> 00:55 P.S. Кстати, как и в первоначально приведенных результатах (забыл сразу про это указать) замеры для каждого значения проводились два раза и бралось лучшее время. Впрочем, девиации при этом почти не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 15:15 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
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 тебе разницу даст. З.Ы. И кстати ты проводил тест на обычном препарированном статменте? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 15:43 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, Вы не в церкви, вас не обманут (ц) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:12 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Денис! Очень прошу, не надо в тридцать третий раз пускаться в одни и те же объяснения.)) Тем более, что я их не просил. Моя ремарка относилась к педпрложениям, что "больше 256 ставить смысла нет" и "на 255 должны быть улучшения". Все. Хотя на счет неравноценности по коммитам отчасти согласен. Вопроса про "обычный препарированный", однако, недопонял. Скармливаю ему одиночный параметризированный запрос. Сам его не препарирую, в надежде на то, что перед первым выполнением он его сам отпрепарирует и так и будет использовать, как описано в хелпе. Хотя какой там использовать, - он же не его на самом деле использует, а внутренний скрытый блок. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:22 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvladVlad F, Вы не в церкви, вас не обманут (ц) При чем здесь не в церкви, причем не обманут? КТО ЗДЕСЬ?!! На самом деле я очень оправдался в своих ожиданиях.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:24 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, ты всё время пытаешься что-то опровергнуть в этой теме. Перечитай себя чужими глазами. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:47 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, а вот для меня результат неожиданный. Я не понимаю почему эмуляция Array DML через EXECUTE BLOCK значительно выигрывает у одиночного подготовленного INSERT, который многократно выполняется с разными параметрами и с коммитом раз в 1000-10000 выполнений. Был бы обычный сервер понял бы, а так для embedded нет никаких сетевых обменов ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:48 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денис, Денис, еще не известно, а выыигрывает ли , никто же с одиночным сравнительно не измерял.))) Или измерял? На самом деле ваш покорный слуга изначально, из общих соображений, предположил, что вроде пачками оно должно быть быстрее. Ну и в любом случае полученные результаты меня более чем устраивают. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:58 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов ДенисЯ не понимаю почему эмуляция Array DML через EXECUTE BLOCK значительно выигрывает у одиночного подготовленного INSERT, который многократно выполняется с разными параметрами и с коммитом раз в 1000-10000 выполнений. А она выигрывает? Он же не тестировал обычный параметризованный DML, только Array с разными размерами пачки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:59 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, вот и я думаю что не должно или выигрывает/проигрывает в пределах погрешности. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 17:03 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Я пока что увидел только замер эффективности использования execute block кодом FireDAC ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 17:52 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
эх, Вострикова на вас нету. он бы намерил... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2018, 16:18 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Мимопроходящий, я домеряю, решил уже, в рабочем порядке. Может завтра, работать ведь тоже надо. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2018, 20:36 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
P.S. Настоящих буйных мало, вот и нету вожаков (c) )) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2018, 20:37 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Мимопроходящийэх, Вострикова на вас нету. он бы намерил...Его теперь ни на кого нет. Ушел в своё фотоподполье и его теперь оттуда никаким калачом не выманишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2018, 01:00 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
07.06.2018 1:00, rdb_dev пишет: > Его теперь ни на кого нет. Ушел в своё фотоподполье и его теперь оттуда никаким калачом не выманишь. ты ещё/уже был тут когда кого-то на #сказочноебали отправляли? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2018, 11:03 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2018, 16:37 |
|
|
start [/forum/topic.php?fid=40&gotonew=1&tid=1561082]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
62ms |
get topic data: |
7ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 171ms |
0 / 0 |