|
|
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
Добрый день! По логике приложения каждый час проходит порядка 500 000 операций UPDATE по одной строке в транзакции. Вопрос - на сколько сильно утяжеляет UPDATE каждое дополнительное поле ? Скажем был UPDATE одного поля, стало два в одном запросе. Желательно более менее аргументированный ответ ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2018, 18:58 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
Проблема в нелинейности процессов и сложности (в смысле - комплексности) адекватного ответа. Это будет большая-большая статья со ссылками на источники и с общим смыслом - "разбирайтесь сами". Из очевидного и "на пальцах" объяснимого влияния: возрастет объем Redo и потребность в Undo. Конкретная цифирь - зависит от конкретной нагрузки на сервер и его конфигурации :) Если рассматривать в пределах одной отдельно взятой операции, то это + размер нового значения в redo, + размер старого (заменяемого) значения в undo + размер старого (заменяемого) значения в Redo, поскольку сегменты отката тоже защищены redo + оверхед. Это если в связи с нововведением не поменялись структуры данных. Если же структура поменялась (к примеру, добавили поле) - то помимо объемов хранения потенциально возможен рост потребностей в буферном кэше, временном табличном пространстве (соединения-сортировки-группировки-структуры PL/SQL) и т.д. Если обновляемое поле проиндексировано - то плюс расходы на index maintenance, в т.ч. redo+undo+redo. Если обновляемое поле еще и FK или FK ссылается на это поле, то плюс потенциальные проблемы с (взаимо)блокировками. Если это поле - ключ секционирования, то плюс расходы на row movement. Конкретные цифры и критичность, опять-таки, зависят от конкретной системы. Плюс сетевые взаимодействия. А еще есть не вполне тривиальная тема "write consistency" с ее "миниоткатами" на уровне statement... Это только то, что на поверхности. На круг - вероятность получить серьезные проблемы сопоставима с вероятностью встретить динозавра на улице (1/2). Как поступить правильно: постройте тест и играйте боевую нагрузку, сравнивайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2018, 19:16 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
andrey_anonymous, Андрей, по моему человек спрашивал не об этом. Он спросил чем отличаются варианты UPDATE tab SET F1 = F1 + 1 и UPDATE tab SET F1 = F1 + 1, F2 = F2 + 1 Автор не сказал, но можно предположить, что вопрос "при прочих равных...", т.е. FK не вовлекаются, констрейнты не проверяются, LOB'ов нет, IOT OVERLFOW нет Предлагаю ответить на вопрос в такой формулировке, а потом автор её может быть расширит КТо знает, chаnge vector в этих двух случаях будут отличны или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2018, 22:22 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
Ярослав Батозскийandrey_anonymous, Андрей, по моему человек спрашивал не об этом. Он спросил чем отличаются варианты UPDATE tab SET F1 = F1 + 1 и UPDATE tab SET F1 = F1 + 1, F2 = F2 + 1 Автор не сказал, но можно предположить, что вопрос "при прочих равных...", т.е. FK не вовлекаются, констрейнты не проверяются, LOB'ов нет, IOT OVERLFOW нет Предлагаю ответить на вопрос в такой формулировке, а потом автор её может быть расширит КТо знает, chаnge vector в этих двух случаях будут отличны или нет? я вот тоже так протелепатил, что автор имеет в виду, но остановил своих "внутренних тараканов", которые у меня послушные и митингов не устраивают. и Андрей здесь абсолютно прав в оценке всего горизонта событий, потому что если "ответить на вопрос в вашей формулировке" (а ТС про широту подхода, обрисованную Андреем, даже и помыслить не мечтал), то хоть 1 поле, хоть все. при апдейте обрабатывается вся строка целиком, все блоки, связанные с ней, меняются/двигаются. undo, redo и прочее выделяются не под отдельно взятое поле, а под всю строку. и это как бы азы оракловой механики... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.04.2018, 23:53 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
Ярослав БатозскийАндрей, по моему человек спрашивал не об этом. Он спросил чем отличаются варианты UPDATE tab SET F1 = F1 + 1 и UPDATE tab SET F1 = F1 + 1, F2 = F2 + 1он про это и отвечал... Ярослав БатозскийКТо знает, chаnge vector в этих двух случаях будут отличны или нет?ну как они могут быть одинаковыми? Читайте: http://www.juliandyke.com/Internals/Redo/Redo.php Fogelundo, redo и прочее выделяются не под отдельно взятое поле, а под всю строку.ну Андрей же уже все описал и гораздо точнее: andrey_anonymousЕсли рассматривать в пределах одной отдельно взятой операции, то это + размер нового значения в redo, + размер старого (заменяемого) значения в undo + размер старого (заменяемого) значения в Redo, поскольку сегменты отката тоже защищены redo + оверхед. зы. было очень лениво и добавить к ответу Андрея уже нечего, но таки не смог удержаться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 01:37 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
NTDimкаждый час проходит порядка 500 000 операций UPDATE по одной строкеодну и ту же строку? в разных сессиях? если - да, то неплохое такое бутылочное горлышко придумали - 140 раз в секунду одну и ту же строку обновлять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 01:41 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
xtenderNTDimкаждый час проходит порядка 500 000 операций UPDATE по одной строкеодну и ту же строку? в разных сессиях? если - да, то неплохое такое бутылочное горлышко придумали - 140 раз в секунду одну и ту же строку обновлять Строки разные, имелось ввиду в одном запросе обновляется одна строка за раз, согласен, не совсем точно сформулировал. Индексы по обновляемом поле отсутствуют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 08:17 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
NTDimне совсем точно сформулировал.совсем не ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 08:23 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
Elic, спасибо за флуд, если нечего сказать по теме, прошу не флудить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 09:30 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
NTDim, я б еще отметил два мометна 1) update t set a=a -оракля счітает как изменение а конечно если меняется одно поле и два поля то с тч редо нагрузка больше (надо сохранять старые и новые значения ) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ps к к-ву изменяемих полей ето не относится, но бывает что важно в разных ли блоках находятся изменяемые записи зыы частые коммиты (140в сек) тож как-бы влияют на журналы .... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 10:20 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
Спасибо! Погоняем тесты, покурим документацию ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 10:30 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
StaxNTDim, я б еще отметил два мометна 1) update t set a=a -оракля счітает как изменение а .... staxВ 12.2, кстати, пофиксили. 12.1 Код: plsql 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. 12.2 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 14:37 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.04.2018, 14:41 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
NTDimПо логике приложения каждый час проходит порядка 500 000 операций UPDATE по одной строке в транзакции.Сиквенс изобретаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 18:06 |
|
||
|
Операция update, сравнение производительности.
|
|||
|---|---|---|---|
|
#18+
oragrafСиквенс изобретаете? 21369850 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.04.2018, 18:09 |
|
||
|
|

start [/forum/topic.php?fid=52&gotonew=1&tid=1884070]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
192ms |
get topic data: |
10ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 509ms |

| 0 / 0 |
