|
bulk-insert'ы при контроле поля на not-null: benchmark для 2 млн строк в 2.5 SC vs 3.0 SC
|
|||
---|---|---|---|
#18+
hi all. Понадобилось как-то затащить в таблицу оч-чень много строк из базы-источника. DDL таблиц полностью совпадает, перенос идёт с помощью IB DataPump. Ясен пень, что если убрать индексы с таблицы-приёмника, то скорость увеличится. Но захотелось также выкинуть (временно) все check'и на ней - "а вдруг взлетит еще быстрее ?". Результат для 2.5 слегка удивил. Если not-null задано вот так: Код: sql 1.
или вот так: Код: sql 1. 2.
или еще вот так: Код: sql 1. 2. 3.
-- то скорость инсертов от наличия/отсутствия этих констрейнтов практически НЕ меняется. Если же not-null обеспечивается в явном виде: Код: sql 1. 2.
или вообще по-дэбильному: Код: sql 1. 2.
-- то скорость инсертов от удаления этих перлов растёт ( в 2.5 ) примерно в 3 раза. Почему так сильно проигрывают предпоследний и последний варианты ? (вариант через триггер хотя и выглядит "не комильфо", однако все check'и ведь тоже внутрях реализованы как триггера! Поэтому столь большая разница как-то настораживает). ####################### Результат для 3.0 также породил душевные терзания. В нём явный проигрыш в скорости инсертов наблюдается там же, где и для 2.5. Однако статистика вставок проигрывает во всех остальных случаях проигрывает примерно в 1.5 раза. ДЕ мне как-то говорил, что 3.0 будет выигрывать у 2.5 только при многопользовательской нагрузке, а в моно-коннекте выигрыш совсем не гарантирован. Однако дифферент 1.5 раза - как-то уж очень сильно... :( Получается, миграцию действительно больших данных вообще лучше в 2.5 делать, а затем b/r ? Вот тест: Код: plaintext 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.
А вот сводный результат по пяти запускам на каждом ФБ (приведены данные, начиная со второго прогона в каждом случае, дабы убрать влияние затрат на рост файла БД): 0. Код: plaintext 1.
1. Код: plaintext 1.
2. Код: plaintext 1.
3. Код: plaintext 1. 2.
4. Код: plaintext 1. 2. 3.
5. Код: plaintext 1. 2.
PS. Версии ФБ: LI-V2.5.5.26910 LI-V3.0.0.32008 База в обоих случаях: page_size = 4K, fw = OFF. Кол-во буферов в обоих инстансах ФБ: 512, арх-ра: SuperClassic. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 23:25 |
|
bulk-insert'ы при контроле поля на not-null: benchmark для 2 млн строк в 2.5 SC vs 3.0 SC
|
|||
---|---|---|---|
#18+
ТаблоидПочему так сильно проигрывают предпоследний и последний варианты ? потому что там есть вызов триггера на каждую запись ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2015, 23:44 |
|
bulk-insert'ы при контроле поля на not-null: benchmark для 2 млн строк в 2.5 SC vs 3.0 SC
|
|||
---|---|---|---|
#18+
dimitr, хорошо, а "кто" тогда выполняет проверки в остальных трёх вариантах: Код: sql 1. 2. 3. 4. 5. 6. 7.
- ? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 07:26 |
|
bulk-insert'ы при контроле поля на not-null: benchmark для 2 млн строк в 2.5 SC vs 3.0 SC
|
|||
---|---|---|---|
#18+
Таблоид"кто" тогда выполняет проверки в остальных трёх вариантах сам движок ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 09:07 |
|
bulk-insert'ы при контроле поля на not-null: benchmark для 2 млн строк в 2.5 SC vs 3.0 SC
|
|||
---|---|---|---|
#18+
Таблоид, в твоём тесте получается, что в трёшке триггеры работают быстрее, а движок медленнее. Странно это... И ещё у тебя тест не совсем чистый. Где гарантия что медленней именно insert, а не select * from src Сколько там хоть записей то и как они распределены? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 09:30 |
|
bulk-insert'ы при контроле поля на not-null: benchmark для 2 млн строк в 2.5 SC vs 3.0 SC
|
|||
---|---|---|---|
#18+
Симонов Денисв трёшке триггеры работают быстрее, а движок медленнее. Странно это... странно то, что триггеры быстрее :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 10:25 |
|
bulk-insert'ы при контроле поля на not-null: benchmark для 2 млн строк в 2.5 SC vs 3.0 SC
|
|||
---|---|---|---|
#18+
Симонов Денисв твоём тесте получается, что в трёшке триггеры работают быстрее, а движок медленнее. Странно это...ну, вот так вот... прогони у себя, получишь, скорее всего тоже самое. Симонов ДенисИ ещё у тебя тест не совсем чистый. Где гарантия что медленней именно insert, а не select * from src Сколько там хоть записей то и как они распределены?затраты на select * from src - это по-любасу постоянная величина. И в стартовом посте всё видно, под спойлером: таблица содержит только числовое поле ID, от 1 до 2'000'000. Индексов нигде нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.08.2015, 12:32 |
|
|
start [/forum/topic.php?fid=40&fpage=72&tid=1562658]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 264ms |
total: | 402ms |
0 / 0 |