|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FПолучается, при допущении, что FireDAC для эмуляции пакетной вставки организует блоки с пачками инсертов, то на ограничение по п.1 мы выходим первым, а ведь 256, для размера подобного пакета, на мой взгляд, это вообще ни о чем. тем не менее, это в 256 раз меньше сетевых раундтрипов Vlad FДмитрий, а вот про снятие данного ограничения в четверке это от чего зависит и какова на сегодняшний день вероятность его снятия? И если будет снято, то каким ожидается новый предел? зависит от времени доделать патч. Пока приоритеты на другом сфокусированы. Новый предел 2^32. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2018, 13:06 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
dimitrтем не менее, это в 256 раз меньше сетевых раундтрипов Не совсем так. Это меньше трипов при исполнении, но при препарации метаданные передаются небольшими кусками и там может быть до 256 раз больше трипов. Так что если роделывать данный трюк без применения мозга и препарировать отдельный EB на каждое исполнение, можно получить нулевой или даже отрицательный эффект. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2018, 13:35 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov> препарировать отдельный EB на каждое исполнение Там один препаре с тучей параметров. Ну, вернее 2 - конечный кусок маленький. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2018, 13:41 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
dimitrVlad FПолучается, при допущении, что FireDAC для эмуляции пакетной вставки организует блоки с пачками инсертов, то на ограничение по п.1 мы выходим первым, а ведь 256, для размера подобного пакета, на мой взгляд, это вообще ни о чем. тем не менее, это в 256 раз меньше сетевых раундтрипов Меньше то оно, конечно, меньше, ну а самое главное, что не оказалось на самом деле пределом для обсуждаемого Array DML, который почему-то не вываливает ничего прохожего на too many contexts и при гораздо больших значениях пакетного массива. Ну или мы не совсем верно предполагаем, как он там внутри использует execute block. Vlad FДмитрий, а вот про снятие данного ограничения в четверке это от чего зависит и какова на сегодняшний день вероятность его снятия? И если будет снято, то каким ожидается новый предел? зависит от времени доделать патч. Пока приоритеты на другом сфокусированы. Новый предел 2^32. Я бы даже сказал, что это уже беспредел какой то!! Хорошо подождем, тем более что от беты четверки в первую очередь жду truncate table и decfloat. Кстати, семантика привычных нумериков будет как-то расширена с появлением decfloat, с тем чтобы их можно было объявлять с точностью более 18, а на самом деле под ними движок самостоятельно оперировал decfoat-ами?? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 15:58 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FКстати, семантика привычных нумериков будет как-то расширена с появлением decfloat, с тем чтобы их можно было объявлять с точностью более 18, а на самом деле под ними движок самостоятельно оперировал decfoat-ами?? да. Оно уже есть. Точность до 34 цифр. Вот только не задача, компоненты доступа сами по себе не научатся работать с DecFloat. Там конечно есть обходные пути (возвращать клиенту строковое представление), но работать с ними уже не так удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:07 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FМеньше то оно, конечно, меньше, ну а самое главное, что не оказалось на самом деле пределом для обсуждаемого Array DML, который почему-то не вываливает ничего прохожего на too many contexts и при гораздо больших значениях пакетного массива. Ну или мы не совсем верно предполагаем, как он там внутри использует execute block.Batch API никак не использует execute block. Не нужно тыкать пальцем в небо. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:23 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денис, Из твоего ответа, однако, не становится ясным, можно ли будет не объявлять явным образом decfloat-поля, а с тем же успехом пользовать numeric(x>18, x) ?? Что же касается маппинга на конкретные типы полей в клиентских библиотеках, то вполне бы устроило, если бы оно автоматом маппилось на те же FmtBcd-типы, что и, к примеру, numeric(18, 4) в настоящее время. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:25 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvladBatch API никак не использует execute block. Никто и не утверждал обратного. Речь об Array DML, эмулируемом на уровне FireDAC. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:30 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, Да NUMERIC(34, x) и DECIMAL(34, x) можно использовать. В новом API есть методы для преобразования DecFloat в BCD но их нужно ещё вызвать. Если в компонентах этих вызовов нет, то ничего не выйдет. А биндинги для поддержки старых клиентов есть, там варианты либо на BIGINT, DOUBLE PRECISION (если точности хватает), либо на строку. Скачай в конце концов себе снапшот и пощупай его. Он кстати устойчивый. IBE частично уже умеет работать с 4.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:33 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvladBatch API никак не использует execute block. Не нужно тыкать пальцем в небо. Согласен, не нужно. Но мы, КМК, не обсуждае сейчас модерновое, Batch API, а продолжаем исследовать особенности Array DML (FireDAC), ради чего, собственно и была создана тема. А про нее Эмбаркадера божится, по ссылке, что я давал выше, что для FB оно так или иначе через execute block. Ты давай, вспоминай.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:34 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, Значит я не так тебя понял ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:35 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvlad, Так вот с одной стороны они там заявляют про execute block, с другой стороны оно у меня не упало при размерах пакета вплоть до 32 768 (!). Правда и рост производительности вставки на этом остановился. Причем безо всяки превышений числа контекстов. Загадка природы, но в исходники лезть пока что не хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:42 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, никаких загадок, многократно выполненный EXEC BLOCK. Трейс в помощь, если исходники смотреть лень. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:47 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvlad, Я как бы догадался про многократный. Вопросы вызывают размеры (число размноженных инсертов) в каждом таком многократном. Первоначальное страшное подозрение об ограничении в 256, почему-то не подтвердилось. Впрочем, ладно, проехали, я вижу мы по-прежнему каждый о своем.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:56 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FПервоначальное страшное подозрение об ограничении в 256, почему-то не подтвердилось. Тот случай, когда неестественный интеллект побеждает и игнорирует указания естественного. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 18:03 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Умничать все мы можем, а по существу есть что-нибудь? Почему контексты не переполнились? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 21:32 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, потому что FireDac обманывает. В реальности он твои 32768 на несколько EXECUTE BLOCK в которых всего 255 операторов. Так что смысла ставить батчи размером больше 255 нет. З.Ы. Я в исходник глянул ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 21:40 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов ДенисVlad F, потому что FireDac обманывает. В реальности он твои 32768 на несколько EXECUTE BLOCK в которых всего 255 операторов. Но ведь при выборе подобной стратегии-обманки нескольких вроде бы и не нужно. Достаточно соорудить один, пусть даже всего на 256 операндов, потом просто перезакладывать параметры и пускать его повторно нужное число раз. Так что смысла ставить батчи размером больше 255 нет. А ты уверен? Сам-то пробовал или только исходники курил? Завтра постараюсь таки опубликовать полученные результаты, сегодня просто времени не хватило. З.Ы. Я в исходник глянул Видимо это как раз тот редкий случай, когда исходники могут ввести в серьезное заблуждение касаемо ожидаемых результатов. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 21:58 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, там их 2. Потому что размер батча может не делится ровно на 255. Ну и выигрыш от увеличения размера батча ты получаешь только потому что в FireDac он устроен так что батчи перепрепарируются целиком, при следующем выполнении. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 22:22 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денисбатчи перепрепарируются целиком, при следующем выполненииУточни, плс ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 23:01 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvlad, судя вот по этому куску именно так Код: 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. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85.
т.е. внутри самого батча лишних препарирований вроде нет, а вот если его повторно выполнять то построение EXECUTE BLOCK и prepare будут делаться заново. Именно поэтому Vlad F получает выигрыш при батчах размером больше 255. Просто выгодней не делать этого лишние разы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 23:09 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денис, спасибо, теперь понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 23:13 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Привожу результаты тестирования института 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 09:04 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, Тебе даже конкретный код приводят, где батчсайз по 255 файрдаком режется, нет, всё равно тестишь 256. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 09:16 |
|
|
start [/forum/topic.php?fid=40&msg=39655128&tid=1561082]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 149ms |
0 / 0 |