|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
Добрый день. Есть элементарный запрос, которым мы пользуемся для изменения не большого количества записей. До 10000 записей обрабатывает до десяти минут: update itemlist set is_lbl_prtd = 1 where is_lbl_prtd = 0 and cashprice >0 Но иногда записей больше 50000 и тогда запрос может работать и пол часа и час, базу столько держать нельзя. Подскажите пожалуйста как сделать цикл допустим на изменение по 10000 записей. P.S. Я не админ БД, но очень интересно... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 12:57 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
bulk collect / forall sample ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 12:58 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
NotPanocДо 10000 записей обрабатывает до десяти минут: Не может быть. Что-то у вас реально неправильно. За десять минут можно проапдейтить несколько миллионов записей на старом ноутбуке. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 13:08 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
Дайте хотя бы кол-во строк в таблице и план запроса. Без этого разговор беспредметный. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 13:11 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
NotPanocбазу столько держать нельзяDimitry SibiryakovНе может быть.очевидно же - блокировки... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 13:11 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
xtenderNotPanocбазу столько держать нельзяDimitry SibiryakovНе может быть.очевидно же - блокировки... Или отсутствие/негодность индекса. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 13:15 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
andrey_anonymous, Или триггеры с кучей логики на таблице. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 13:40 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
Так и есть. В БД куча джобов, тригеров, под разными схемами и т.д. Мы запускаем скрипт из SQL Developer , админы БД работают в другой проге, возможно с этим связано. У меня не хватает знаний( Буду читать учебники... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 13:59 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНе может быть. Что-то у вас реально неправильно. За десять минут можно проапдейтить несколько миллионов записей на старом ноутбуке.Как вариант, в таблице миллиард записей и запрос не попадает в индекс. Нужен план запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 16:30 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
Synoptic, Тогда бы и 10тыс и 50тыс отрабатывало бы примерно одинаково долго. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 17:29 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
Это ж какие триггеры надо наваять, чтобы по 17 записей в секунду отрабатывало. Как бы то ни было, лучше не гадать ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 17:32 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
xtender, в любом случае вводных слишком мало ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 18:14 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
xtenderТогда бы и 10тыс и 50тыс отрабатывало бы примерно одинаково долго. Вероятность влететь в микрооткат на 50тыс выше, чем на 10 :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 18:19 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
andrey_anonymous, Это возможно безотносительно отсутствия индекса, но при этом снова возвращает к проблемам конкурентного доступа. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 18:43 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
Можно было бы еще нафантазировать resumable. xtenderТогда бы и 10тыс и 50тыс отрабатывало бы примерно одинаково долго.При большем количестве записей может не использоваться индекс или, наоборот, неудачно использоваться. Только 10000 записей за 10 минут и 50000 за полчаса-час вполне линейная зависимость. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 19:09 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
xtenderЭто возможно безотносительно отсутствия индекса, но при этом снова возвращает к проблемам конкурентного доступа. Это просто контраргумент к утверждению 21956668 . Ну и для проявления в полный рост достаточно одной удачной короткой конкурентной транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 19:52 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
xtender, xtenderЭто возможно безотносительно отсутствия индекса, но при этом снова возвращает к проблемам конкурентного доступа. Это возможно безотносительно наличия конкурентного доступа. Код: 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. 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.
trace file: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
19.4.0.0.190716. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 20:35 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
SeaGate, Да, я в курсе, обычно это показывают на инсерте, тк там это легче повторить - и размер растёт значительно быстрее ... |
|||
:
Нравится:
Не нравится:
|
|||
23.08.2019, 23:59 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
Попробуйте так Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 15:18 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
xtender, xtenderДа, я в курсе, обычно это показывают на инсерте, тк там это легче повторить - и размер растёт значительно быстрее Мы, видимо, имеем в виду разные DML Restarts, т.к. приведенный DML Restart на UPDATE повторить таки проще, чем на INSERT. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 16:32 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
NotPanoc, как вариант (я прям предвижу кучу говна негатива в свой адрес, но реально так может быть быстрее, без теста на вашей базе не узнать) создаем таблицу с записями, которые хотим изменить Код: plsql 1. 2. 3. 4. 5.
такая таблица создастся быстро и не будет "держать базу" а потом merge (можно и update where rowid in (select rwd from tmp_itemlist), но я предпочитаю merge) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
апдейт по rowid, имхо, самый быстрый вариант в случае, когда нельзя пересоздать таблицу p.s. есть опасность, что админы в момент выполнения запроса будут что-то делать в базе, что повлияет на rowid (например, перемещать в другой tablespace) по моему опыту, админы должны предупреждать о таких вещах рассылкой если не предупреждают, ну, можно позвонить и спросить)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 16:35 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
chidoriamiадмины в момент выполнения запроса будут что-то делать в базе, что повлияет на rowid"переместить" строку можно банальным dml. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 16:46 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
-2-chidoriamiадмины в момент выполнения запроса будут что-то делать в базе, что повлияет на rowid"переместить" строку можно банальным dml. row movement - не единственная потенциальная проблема предложенного метода. Но при выполнении ряда условий метод действительно позволяет "проскочить" statement restart. При невыполнении этих условия метод способен устроить data inconsistency, но то такое, молодежь от природы оптимистична ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 16:50 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
andrey_anonymous, а какие еще проблемы у предложенного метода? (мне для саморазвития и да, я оптимист)))) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 18:34 |
|
Изменение большого количества записей в одной таблице. Как сделать цикл...
|
|||
---|---|---|---|
#18+
chidoriamiа какие еще проблемы у предложенного метода? (мне для саморазвития и да, я оптимист)))) Логическая проблема: в исходной таблице могут существовать существуют inter-row dependencies, и между моментом формирования списка rowid и update состояние записей изменилось (а если поводом для велосипедостроения послужила конкуренция, то оно точно изменилось) => update (merge) может привести к нарушению целостности данных. То же верно и без inter-row deps, если состояние атрибутов подопытной таблицы находится в функциональной зависимости от атрибутов иных таблиц. Проблема здравого смысла: формирование списка rowid суть отбор тех самых строк, которые следует обновить. Есть очень мало причин не обновить строки сразу по факту нахождения, а записать их координаты для обновления отдельным процессом. Проблема административно-техническая: вендор не рекомендует проектировать тех.процессы таким образом, чтобы сохранять rowid записей в таблицах БД. Проблема этическая: тот, кто придет после Вас и увидит подобные решения, будет костерить Вас от всей своей широкой души и, заламывая руки, закатывая глаза и брызгая слюной, требовать "все переписать". ... |
|||
:
Нравится:
Не нравится:
|
|||
26.08.2019, 19:05 |
|
|
start [/forum/topic.php?fid=52&msg=39853400&tid=1882152]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 253ms |
total: | 391ms |
0 / 0 |