|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
В чем может быть причина замедления FORALL INSERT? Несколько разных сессий выполняют вот такую процедуру вставки строк. Процедура приведена не полностью, но замеры времени выполнения участков кода, показывают что именно время выполнение этого кода возрастает. Здесь выполняется INSERT через FORALL порциями по 10000 строк. Таблица, в которую выполняется вставка, совершенно пустая – вновь созданная, нет никаких триггеров, никаких индексов , но она LOGGING. Чем дальше, тем больше становиться время вставки порции строк. Т.е. скорость процесса всё время плавно уменьшается. Хинт APPEND здесь не работает (это подтверждается планом в котором говориться что conventional insert (не direct)). Пробовал заменить на APPEND_VALUES – в этом случае сессии начинают блокировать друг друга, появляется ожидание «enq: TM – contention» и всё тормозит еще сильнее. Ожидания этой сессии, отсортировано по TIME_WAITED, ничего криминального тут не вижу. EVENT;TIME_WAITEDdirect path read;262343db file sequential read;9715read by other session;6161db file parallel read;736direct path read temp;426Disk file operations I/O;218direct path write temp;81direct path write;46latch: cache buffers chains;9library cache load lock;7log file switch (private strand flush incomplete);3cursor: pin S wait on X;2library cache: mutex X;1events in waitclass Other;1latch: shared pool;0latch: row cache objects;0enq: HW - contention;0buffer busy waits;0 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
В чём может быть причина постепенного замедления процесса? И как это исправить? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2019, 17:13 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobИ как это исправить? зачем? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2019, 18:08 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
alex-lsMinistrBobИ как это исправить? зачем? Чтобы быстрее вставлялось или хотя бы скорость не уменьшалась а оставалась на одном уровне. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2019, 18:13 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobИ как это исправить?Не гонять через PL/SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2019, 18:41 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobЗдесь выполняется INSERT через FORALL порциями по 10000 строк. Таблица, в которую выполняется вставка, совершенно пустая – вновь созданная, нет никаких триггеров, никаких индексов , но она LOGGING. Чем дальше, тем больше становиться время вставки порции строк. Т.е. скорость процесса всё время плавно уменьшается. Хинт APPEND здесь не работает (это подтверждается планом в котором говориться что conventional insert (не direct)). Пробовал заменить на APPEND_VALUES – в этом случае сессии начинают блокировать друг друга, появляется ожидание «enq: TM – contention» и всё тормозит еще сильнее. 1. Хинт append и не должен работать в insert values. 2. append_values - правильная замена append для insert values 3. insert append блокирует сегмент, в который выполняет вставку - это штатное поведение, и именно поэтому в конкурентном окружении вставку append-ом обычно не производят. По деградации производительности: в Вашем случае, скорее всего, дело в запросе, которым гребет данные курсор. Если он гребет данные из интенсивно обновляемой таблицы - то сценарий весьма вероятен. Я бы снял 10046 level8 с процесса и локализовал проблему, но апологеты ash/awr, боюсь, сейчас забросают меня помидорами :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2019, 19:33 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobЧтобы быстрее вставлялось или хотя бы скорость не уменьшалась а оставалась на одном уровне. так скорость значительно падает? или Вы пишите из-за 1-2%? вставьте одним insert select, без разбиения на мелкие порции ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2019, 05:51 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
alex-lsMinistrBobЧтобы быстрее вставлялось или хотя бы скорость не уменьшалась а оставалась на одном уровне. так скорость значительно падает? или Вы пишите из-за 1-2%? вставьте одним insert select, без разбиения на мелкие порции ElicНе гонять через PL/SQL. Смысл в PL\SQL и разбиении на маленькие порции в задаче. Нужно перебросить таблицу размером 30Тб из одного ТП в другое, потому что уже максимум файлов в ТП - 1022 и больше его расширять не получиться. На оборудовании заказчика такая операция оценочно идет 20-30 дней. Поэтому нужен процесс переноса, который можно перезапускать многократно. Пробовали alter table ... move и dbms_redefinition - не подходит в данном случае. Если эти процессы падают, а они падают это время и не один раз, а еще иногда просят остановить всё потому что тормозит всё сильно. Поэтому нужен полностью управляемый код, который можно править как хочешь. andrey_anonymousПо деградации производительности: в Вашем случае, скорее всего, дело в запросе, которым гребет данные курсор. Если он гребет данные из интенсивно обновляемой таблицы - то сценарий весьма вероятен. Я бы снял 10046 level8 с процесса и локализовал проблему, но апологеты ash/awr, боюсь, сейчас забросают меня помидорами :) По поводу трассировки хорошая идея, только заказчик не даёт доступ к серверу непосредственно, у меня есть только машина с Toad и учёткой пользователя sysdba, а вот sys у меня нет. Из Toad можно конечно запустить трассировку, но как потом получить файл, а самое главное его обработать, чего-то не хочеться в сыром трейсе копаться. Запрос гребет из опорной таблицы в которой просто список ID переносимых строк, чтобы понимать что уже перенесено. После вставки порции 10000 этаже порция ID удаляется из этой таблицы, т.е. да она постоянно обновляется, насчёт интенсивно или нет - не знаю. А что тут можно сделать? Последний замер показал что скорость не уменьшается линейно, она постоянно разная, просто она стала меньше чем в первый день в целом, поэтому показалось что она уменьшается. Во вложении график скорости процесса за вчера - пик был в 6 утра, спрошу у админа чего у них там такое происходит в это время. Приведу ниже всю процедуру чтобы было понятно. Таких процедур выполняется 10 шт, т.е. 10 потоков, и в каждом потоке еще и вставка идет порциями по 10000 строк. Такая порция, при работающих пользователях, сейчас вставляется примерно за 30 минут. ИЗ ИДЕЙ: - Хочу попробовать одну процедуру (один поток) с +APPEND_VALUES и порциями побольше, 50-100тыс.строк. Вот текст типовой процедуры (одна из 10). Код: 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. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2019, 14:54 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBob есть только машина с Toad и учёткой пользователя sysdba, а вот sys у меня нет. ты отжигаешь ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2019, 15:25 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobПоследний замер показал что скорость не уменьшается линейно, она постоянно разная, просто она стала меньше чем в первый день в целом, поэтому показалось что она уменьшается. Во вложении график скорости процесса за вчера - пик был в 6 утра, спрошу у админа чего у них там такое происходит в это время. наверное это пик загрузки системы, например дисковой системы, у Вас же другие сессия базе работают? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2019, 17:37 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
-2-MinistrBob есть только машина с Toad и учёткой пользователя sysdba, а вот sys у меня нет. ты отжигаешь Поверь, это не самое извращенное что мне приходилось делать :) А что делать то. Не мы таки, жизнь така. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2019, 21:21 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
alex-lsMinistrBobПоследний замер показал что скорость не уменьшается линейно, она постоянно разная, просто она стала меньше чем в первый день в целом, поэтому показалось что она уменьшается. Во вложении график скорости процесса за вчера - пик был в 6 утра, спрошу у админа чего у них там такое происходит в это время. наверное это пик загрузки системы, например дисковой системы, у Вас же другие сессия базе работают? Конечно работают. Там порядка 1200 пользовательских сессий и еще куча служб всяких. Я же и говорю процесс дней на 20-30 при полной загрузке, в этом то и прелесть :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2019, 21:22 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobКонечно работают. Там порядка 1200 пользовательских сессий и еще куча служб всяких. Я же и говорю процесс дней на 20-30 при полной загрузке, в этом то и прелесть :) так пусть "хозяева" снимут Вам AWR ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2019, 03:13 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobтолько заказчик не даёт доступ к серверуТы кто там? Разработчик? Временной консультант? ...? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2019, 07:44 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
ElicMinistrBobтолько заказчик не даёт доступ к серверуТы кто там? Разработчик? Временной консультант? ...? Я бы это назвал временная и экстренная тех.поддержка. "Пока гром не грянет, мужик живёт и думает что всё ОК". Но на самом деле когда система вводилась в эксплуатацию лет 7 назад, никто и не предполагал что таблицы будут разрастаться до таких размеров, и ведь ничего оттуда удалять нельзя - все нужное. Весь мир катиться к тому что скоро многие технологии перестанут работать, тупо из-за объемов данных, вот здесь простой move table уже не катит. Вот интересная статья на тему - Почему RAID 6 перестанет работать в 2019 году? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2019, 10:45 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobА что делать тоНевежество вздохами не лечится. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2019, 14:01 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBob.... Нужно перебросить таблицу размером 30Тб из одного ТП в другое, потому что уже максимум файлов в ТП - 1022 .... MinistrBob.... Но на самом деле когда система вводилась в эксплуатацию лет 7 назад, никто и не предполагал что таблицы будут разрастаться до таких размеров, и ведь ничего оттуда удалять нельзя - все нужное. .... мало кто знает, что будет с ним через 7 лет, не говоря уже о самой идеальной системе, созданной здесь и сейчас. Вам(Тебе) нужно не xyйнёй "экстренная тех.поддержка" заниматься, а рефакторить архитектуру, разбив эту неебическую таблицу на множества: партиции, но тут, боюсь, даже они уже не вытянут, а лучше разные таблицы по периодам (кстати до появления партиций вполне себе работающий и, кстати, до сих пор на некоторых системах древней разработки, метод). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2019, 00:37 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobandrey_anonymousПо деградации производительности: в Вашем случае, скорее всего, дело в запросе, которым гребет данные курсор. Если он гребет данные из интенсивно обновляемой таблицы - то сценарий весьма вероятен. Я бы снял 10046 level8 с процесса и локализовал проблему, но апологеты ash/awr, боюсь, сейчас забросают меня помидорами :) По поводу трассировки хорошая идея, только заказчик не даёт доступ к серверу непосредственно, у меня есть только машина с Toad и учёткой пользователя sysdba, а вот sys у меня нет. Из Toad можно конечно запустить трассировку, но как потом получить файл, а самое главное его обработать, чего-то не хочеться в сыром трейсе копаться. Этого более чем достаточно. Код: plsql 1. 2. 3. 4.
Обработать - можно хоть штатным tkprof, хоть orasrp. MinistrBob Запрос гребет из опорной таблицы в которой просто список ID переносимых строк, чтобы понимать что уже перенесено. После вставки порции 10000 этаже порция ID удаляется из этой таблицы, т.е. да она постоянно обновляется, насчёт интенсивно или нет - не знаю. А что тут можно сделать? Напрасно. Просто логируйте максимальный перенесенный вашей же процедурой ID в отдельную табличку и отбирайте по критерию неравенства. MinistrBobВот текст типовой процедуры (одна из 10). Избавьтесь от delete, он не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2019, 15:15 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
andrey_anonymousмаксимальный перенесенный вашей же процедурой IDОдного id мало для попроцессного распараллеливания. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2019, 18:55 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
andrey_anonymous, Я бы на месте автора сделал бы немного по другому. Создал бы таблицу, содержащую инфу для параллельной обработки, в которой бы хранил диапазоны ID, которые необходимо перенести в рамках одной таски Код: plsql 1. 2. 3. 4.
Процедурой брал бы первый необработанный кусок, сразу проставлял ему статус ЗАНЯТО, дабы параллельные процессы не забрали его вместе с текущим Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
обрабатывал его без всяких массивов просто Код: plsql 1.
в конце проставлял, что кусок завершен. Код: plsql 1.
как вариант почитайте еще про DBMS_PARALLEL_EXECUTE ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2019, 21:17 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
Плюс нужно понимать, что параллельные insertы не всегда работают лучше одиночного, так как работа в таком режиме идёт в основном с дисками, а не с CPU(10046 level 8 покажет какие ожидания доминируют, как уже сказали выше) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2019, 21:33 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobСмысл в PL\SQL и разбиении на маленькие порции в задаче. Нужно перебросить таблицу размером 30Тб из одного ТП в другое, потому что уже максимум файлов в ТП - 1022 и больше его расширять не получиться. На оборудовании заказчика такая операция оценочно идет 20-30 дней. Поэтому нужен процесс переноса, который можно перезапускать многократно. Пробовали alter table ... move и dbms_redefinition - не подходит в данном случае. Если эти процессы падают, а они падают это время и не один раз, а еще иногда просят остановить всё потому что тормозит всё сильно. Поэтому нужен полностью управляемый код, который можно править как хочешь. виртуально делите исходную таблицу на N сопоставимого размера кусков, через dbms_parallel_execute.create_chunks_by_rowid/create_chunks_by_number_col, либо DIY parallelism . куски грузим последовательно, в один поток, но с enable_parallel_dml и выставленным DOP. примерно так: Код: plsql 1. 2. 3. 4. 5. 6.
конкретные N и DOP подбирать по ситуации и тестировать. чем меньше N, тем меньше времени займет процесс от начала до конца, но тем выше будет цена падения процесса загрузки одного куска. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2019, 05:17 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobТаких процедур выполняется 10 шт, т.е. 10 потоков, и в каждом потоке еще и вставка идет порциями по 10000 строк. Интересно, как у вас работает параллельная вставка из нескольких потоков в одну и ту же таблицу с хинтом APPEND? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 11:27 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
watsonMinistrBobТаких процедур выполняется 10 шт, т.е. 10 потоков, и в каждом потоке еще и вставка идет порциями по 10000 строк. Интересно, как у вас работает параллельная вставка из нескольких потоков в одну и ту же таблицу с хинтом APPEND?Перечитай его сообщения. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 11:30 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
-2-watsonпропущено... Интересно, как у вас работает параллельная вставка из нескольких потоков в одну и ту же таблицу с хинтом APPEND?Перечитай его сообщения. Ага, не работает.. виноват. Тогда, как уже писали и упоминал автор - APPEND_VALUES с одним потоком. Ну и DELETE, я бы заменил на truncate в самом конце, когда все данные скопировались. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 11:42 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
read by other session это плохо . ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2019, 19:59 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
FogelMinistrBob.... Нужно перебросить таблицу размером 30Тб из одного ТП в другое, потому что уже максимум файлов в ТП - 1022 .... MinistrBob.... Но на самом деле когда система вводилась в эксплуатацию лет 7 назад, никто и не предполагал что таблицы будут разрастаться до таких размеров, и ведь ничего оттуда удалять нельзя - все нужное. .... мало кто знает, что будет с ним через 7 лет, не говоря уже о самой идеальной системе, созданной здесь и сейчас. Вам(Тебе) нужно не xyйнёй "экстренная тех.поддержка" заниматься, а рефакторить архитектуру, разбив эту неебическую таблицу на множества: партиции, но тут, боюсь, даже они уже не вытянут, а лучше разные таблицы по периодам (кстати до появления партиций вполне себе работающий и, кстати, до сих пор на некоторых системах древней разработки, метод). Просто так менять что-то в промышленной системе? Заказчику было предложена новая версия ПО, но он не хочет и это его право. А без его решения и оплаты, зачем что-то менять, тем более там не только БД придется менять но еще и приклад. Это вопрос не технический, а организационный. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 17:32 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBob, Если так хочется отдельное ТС для таблицы и она занимает б о льшую часть, перенеси из ТС другие объекты. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 17:41 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
andrey_anonymousMinistrBobпропущено... По поводу трассировки хорошая идея, только заказчик не даёт доступ к серверу непосредственно, у меня есть только машина с Toad и учёткой пользователя sysdba, а вот sys у меня нет. Из Toad можно конечно запустить трассировку, но как потом получить файл, а самое главное его обработать, чего-то не хочеться в сыром трейсе копаться. Этого более чем достаточно. Код: plsql 1. 2. 3. 4.
Обработать - можно хоть штатным tkprof, хоть orasrp. MinistrBobЗапрос гребет из опорной таблицы в которой просто список ID переносимых строк, чтобы понимать что уже перенесено. После вставки порции 10000 этаже порция ID удаляется из этой таблицы, т.е. да она постоянно обновляется, насчёт интенсивно или нет - не знаю. А что тут можно сделать? Напрасно. Просто логируйте максимальный перенесенный вашей же процедурой ID в отдельную табличку и отбирайте по критерию неравенства. MinistrBobВот текст типовой процедуры (одна из 10). Избавьтесь от delete, он не нужен. Отдельное спасибо за процедуру трассировки без доступа к серверу! Toad позволяет получить ADDM - но там ничего критичного, самое большое ожидание сессии - direct path read. А что сделаешь с этим, я полагаю что ничего. В конечно итоге всё упирается в железо. Смысл все канители с удалениями в том что там 10 таких процедур параллельно запускаються - это раз, а еще всё это частенько падает или останавливается - т.е. нужно много кратно перезапускать. Я раньше делал, без опорной таблицы, через minus выявлял что уже перенесено, но на огромных объемах этот minus работал часами и каждый перезапуск очень долго запускался. С опорной таблицей всё гораздо быстрее. А замеры времени каждого куска кода показали что медленнее всего именно insert, а delete на его фоне в разы быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 17:42 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
feagorandrey_anonymous, Я бы на месте автора сделал бы немного по другому. Создал бы таблицу, содержащую инфу для параллельной обработки, в которой бы хранил диапазоны ID, которые необходимо перенести в рамках одной таски .... как вариант почитайте еще про DBMS_PARALLEL_EXECUTE В механизме есть такая таблица, посмотри курсор в процедуре выбирает один чанк Код: plsql 1. 2. 3.
Таких чанков 10. Таблица создаётся так Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
А параллельность обеспечивается тем что 10 чанков запускаются через DBMS_SCHEDULER (вместо DBMS_PARALLEL_EXECUTE) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 17:48 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
feagorПлюс нужно понимать, что параллельные insertы не всегда работают лучше одиночного, так как работа в таком режиме идёт в основном с дисками, а не с CPU(10046 level 8 покажет какие ожидания доминируют, как уже сказали выше) Я провел эксперимент и в insert заменил хин append (который не работает = игнорируется из-за фразы values в insert) на append_values. Только пришлось запустить в один поток, потому что при такой вставке таблица эксклюзивно блокируется и если запустить несколько потоков параллельно, они тупо стоят и ждут. И append_values работает гораздо быстрее, за счёт реальной direct вставки, но замеры временных показателей показали, что несмотря на то что каждый в отдельности процесс append выполняется медленнее append_values но за счёт того что их 10, они параллельно быстрее раза в два ушатают всю таблицу. Так что отказался от идеи append_values и одного процесса. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 17:55 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
кит северных морейMinistrBobСмысл в PL\SQL и разбиении на маленькие порции в задаче. Нужно перебросить таблицу размером 30Тб из одного ТП в другое, потому что уже максимум файлов в ТП - 1022 и больше его расширять не получиться. На оборудовании заказчика такая операция оценочно идет 20-30 дней. Поэтому нужен процесс переноса, который можно перезапускать многократно. Пробовали alter table ... move и dbms_redefinition - не подходит в данном случае. Если эти процессы падают, а они падают это время и не один раз, а еще иногда просят остановить всё потому что тормозит всё сильно. Поэтому нужен полностью управляемый код, который можно править как хочешь. виртуально делите исходную таблицу на N сопоставимого размера кусков, через dbms_parallel_execute.create_chunks_by_rowid/create_chunks_by_number_col, либо DIY parallelism . куски грузим последовательно, в один поток, но с enable_parallel_dml и выставленным DOP. примерно так: Код: plsql 1. 2. 3. 4. 5. 6.
конкретные N и DOP подбирать по ситуации и тестировать. чем меньше N, тем меньше времени займет процесс от начала до конца, но тем выше будет цена падения процесса загрузки одного куска. Вот это интересно, покурю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 17:57 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBob, Сделай вставку в 10 потоков с append_values в 10 таблиц, потом их склей в партиции целевой таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 17:58 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
watsonMinistrBobТаких процедур выполняется 10 шт, т.е. 10 потоков, и в каждом потоке еще и вставка идет порциями по 10000 строк. Интересно, как у вас работает параллельная вставка из нескольких потоков в одну и ту же таблицу с хинтом APPEND? Нормально работает. Из за фразы values в insert хинт append просто игнорируется и выполняются обычные (conventional) insert. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 17:59 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
-2-MinistrBob, Если так хочется отдельное ТС для таблицы и она занимает б о льшую часть, перенеси из ТС другие объекты. Уже сделано, но там других объектов было с гулькин нос, так что освободившееся место даст времени на перенос таблицы. Кроме этого из самой таблицы удалили всё что только можно, но удалить там можно было тоже очень мало чего. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 18:02 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
oragrafMinistrBob, Сделай вставку в 10 потоков с append_values в 10 таблиц, потом их склей в партиции целевой таблицы А чего можно отдельные таблицы склеивать в партиционированную таблицу? по какому тогда признаку они будут у меня партиционироваться, вставка ведь беспорядочно идет? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 18:04 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBob-2-MinistrBob, Если так хочется отдельное ТС для таблицы и она занимает б о льшую часть, перенеси из ТС другие объекты. Уже сделано, но там других объектов было с гулькин нос, так что освободившееся место даст времени на перенос таблицы. Кроме этого из самой таблицы удалили всё что только можно, но удалить там можно было тоже очень мало чего. само по себе удаление данных из таблицы, без дополнительных телодвижений, не освобождает место в ТП - только в самой таблице и только для conventional insert. возможно вам имеет смысл секционировать таблицу, например по какой-то дате, и хранить каждую секцию в своем tablespace, пропорциональном размеру секции (например секция размером в месяц, ТП размером в год, в нем 12 секций). ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 18:08 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobА чего можно отдельные таблицы склеивать в партиционированную таблицу?Можно обменивать таблицу и партицию.MinistrBob-2-Если так хочется отдельное ТС для таблицы и она занимает б о льшую часть, перенеси из ТС другие объекты.Уже сделано, но там других объектов было с гулькин нос, так что освободившееся место даст времени на перенос таблицы. Кроме этого из самой таблицы удалили всё что только можно, но удалить там можно было тоже очень мало чего.Если TS и так не занят другими объектами, в чем тогда смысл переливания из пустого в порожнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 18:08 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobВ механизме есть такая таблица, посмотри курсор в процедуре выбирает один чанк Попробуйте понять разницу между "хранятся копии всех айдишников" и "хранятся диапазоны". вы в рамках каждой таски сейчас делаете удаление такого же количества записей, какое и вставляете в новую таблицу. в то время, как от этого можно(нужно) отказаться+доп.расходы на коллекции, которые в общем то тоже не особо нужны ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2019, 18:45 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBob ElicНе гонять через PL/SQL. Смысл в PL\SQL и разбиении на маленькие порции в задаче. Нужно перебросить таблицу размером 30Тб из одного ТП в другое, потому что уже максимум файлов в ТП - 1022 и больше его расширять не получиться. На оборудовании заказчика такая операция оценочно идет 20-30 дней. Поэтому нужен процесс переноса, который можно перезапускать многократно. Пробовали alter table ... move и dbms_redefinition - не подходит в данном случае. Если эти процессы падают, а они падают это время и не один раз, а еще иногда просят остановить всё потому что тормозит всё сильно. Поэтому нужен полностью управляемый код, который можно править как хочешь. А как вариант, разбить табличку на бОльшее количество чанков. На столько, чтобы вставка одного чанка занимала "малое" время. Тогда вместо FORALL Код: plsql 1. 2.
И оставить те же 10 параллельных потоков для обработки, условно, 1000 небольших чанков. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2019, 10:15 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
кит северных морейMinistrBobпропущено... Уже сделано, но там других объектов было с гулькин нос, так что освободившееся место даст времени на перенос таблицы. Кроме этого из самой таблицы удалили всё что только можно, но удалить там можно было тоже очень мало чего. само по себе удаление данных из таблицы, без дополнительных телодвижений, не освобождает место в ТП - только в самой таблице и только для conventional insert. возможно вам имеет смысл секционировать таблицу, например по какой-то дате, и хранить каждую секцию в своем tablespace, пропорциональном размеру секции (например секция размером в месяц, ТП размером в год, в нем 12 секций). Заказчик боится такие действия делать. Мотивируется это тем что работу приклада с партиционированными таблицами никто не тестировал, поэтому нефиг это делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 14:07 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
-2-MinistrBobА чего можно отдельные таблицы склеивать в партиционированную таблицу?Можно обменивать таблицу и партицию.MinistrBobпропущено... Уже сделано, но там других объектов было с гулькин нос, так что освободившееся место даст времени на перенос таблицы. Кроме этого из самой таблицы удалили всё что только можно, но удалить там можно было тоже очень мало чего.Если TS и так не занят другими объектами, в чем тогда смысл переливания из пустого в порожнее. Потому что единственный сегмент в этом ТП, таблица которая сейчас переносится в другое ТП, разросся до размеров ТП. А увеличить ТП нельзя, т.к. достигнуто предельное количество файлов = 1022. Новое ТП создано с большим размером блока = 16Кб и поэтому таблица переезжает сюда чтобы иметь возможность расти дальше. Про партиционирование написал выше - заказчик пока против партиционирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 14:11 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
feagorMinistrBobВ механизме есть такая таблица, посмотри курсор в процедуре выбирает один чанк Попробуйте понять разницу между "хранятся копии всех айдишников" и "хранятся диапазоны". вы в рамках каждой таски сейчас делаете удаление такого же количества записей, какое и вставляете в новую таблицу. в то время, как от этого можно(нужно) отказаться+доп.расходы на коллекции, которые в общем то тоже не особо нужны Спасибо, присмотрюсь повнимательнее, попробую понять разницу. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 14:12 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
watson А как вариант, разбить табличку на бОльшее количество чанков. На столько, чтобы вставка одного чанка занимала "малое" время. Тогда вместо FORALL Код: plsql 1. 2.
И оставить те же 10 параллельных потоков для обработки, условно, 1000 небольших чанков. Да как вариант. Это похоже на то что предлагает feagor . Можно будет попробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 14:19 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
оффтопandrey_anonymous Код: plsql 1. 2. 3. 4.
Почему ни одна редиска не скинула мне подобный кусок в моей теме ? Это что какое-то тайное знание? Два чая джентльмену andrey_anonymous! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2019, 15:35 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
IMNOПочему ни одна редиска не скинула мне подобный кусок в моей теме ? https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1271615&msg=21546909 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2019, 12:09 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
andrey_anonymous Код: plsql 1.
Кстати не всегда указывает туда куда надо. Пока самым надежным вариантом кажется такой Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2019, 17:01 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
feagorКстати не всегда указывает туда куда надо. Пример, когда из всех параметров правильно указывал только _diag_adr_trace_dest 12.2с ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2019, 17:09 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobВ чем может быть причина замедления FORALL INSERT? Несколько разных сессий выполняют вот такую процедуру вставки строк. Процедура приведена не полностью, но замеры времени выполнения участков кода, показывают что именно время выполнение этого кода возрастает. Здесь выполняется INSERT через FORALL порциями по 10000 строк. Таблица, в которую выполняется вставка, совершенно пустая – вновь созданная, нет никаких триггеров, никаких индексов , но она LOGGING. Чем дальше, тем больше становиться время вставки порции строк. Т.е. скорость процесса всё время плавно уменьшается. Хинт APPEND здесь не работает (это подтверждается планом в котором говориться что conventional insert (не direct)). Пробовал заменить на APPEND_VALUES – в этом случае сессии начинают блокировать друг друга, появляется ожидание «enq: TM – contention» и всё тормозит еще сильнее. Ожидания этой сессии, отсортировано по TIME_WAITED, ничего криминального тут не вижу. EVENT;TIME_WAITEDdirect path read;262343db file sequential read;9715read by other session;6161db file parallel read;736direct path read temp;426Disk file operations I/O;218direct path write temp;81direct path write;46latch: cache buffers chains;9library cache load lock;7log file switch (private strand flush incomplete);3cursor: pin S wait on X;2library cache: mutex X;1events in waitclass Other;1latch: shared pool;0latch: row cache objects;0enq: HW - contention;0buffer busy waits;0 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
В чём может быть причина постепенного замедления процесса? И как это исправить? если уж такой критический случай, я бы сделал объектный тип верхнего уровня с коллекцией, в которую бы фетчил курсор балками тыщ по двадцать-тридцать, и инсертел бы INSERT /*+APPEND PARALLEL*/ INTO ela_document_copy SELECT * FROM TABLE(:X), а коммит делал бы после примерно десяти таких инсертов. Предварительно конечно надо было бы делать ALTER SESSION ENABLE PARALLEL DML (не прав?) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2019, 18:32 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
--Eugene--, Ты тоже не понимаешь, что значит "не гонять через PL/SQL"? А через объекты тем паче? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 02:05 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
Elic, хорошо, а каким способом фетчить курсор в коллекцию, а затем вставлять as select, не гоняя через PL/SQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 12:48 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
--Eugene--, Кто тебе сказал, что нужен курсор? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 14:02 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
--Eugene--инсертел бы INSERT /*+APPEND PARALLEL*/ INTO ela_document_copy SELECT * FROM TABLE(:X), а коммит делал бы после примерно десяти таких инсертов отвалится уже на втором. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 16:04 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobНужно перебросить таблицу размером 30Тб из одного ТП в другое, потому что уже максимум файлов в ТП - 1022 и больше его расширять не получиться.соррь, не осилил весь топик целиком, а почему просто не создать секционированную таблицу в том же тейблспейсе и не сделать туда alter table exchange partition, а потом уже создать новую секцию в другом и чтобы новые данные туда лились? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 16:08 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
xtenderсоррь, не осилил весь топик целиком, а почему просто не создать секционированную таблицу 21929440 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 16:28 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
MinistrBobкит северных морейпропущено... виртуально делите исходную таблицу на N сопоставимого размера кусков, через dbms_parallel_execute.create_chunks_by_rowid/create_chunks_by_number_col, либо DIY parallelism . куски грузим последовательно, в один поток, но с enable_parallel_dml и выставленным DOP. примерно так: Код: plsql 1. 2. 3. 4. 5. 6.
конкретные N и DOP подбирать по ситуации и тестировать. чем меньше N, тем меньше времени займет процесс от начала до конца, но тем выше будет цена падения процесса загрузки одного куска. Вот это интересно, покурю :) ТС, покурили? как реализовали в итоге? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 16:34 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
ElicКто тебе сказал, что нужен курсор? Если проблема в insert - то не нужен. Если в select по крупным таблицам - то пусть лучше будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 16:44 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
Elic--Eugene--, Кто тебе сказал, что нужен курсор?никто мне не говорил, это я спрашиваю: есть задача (для простоты понимания, представь, не связанная с данным топиком) - на входе имеется курсор известной структуры, и весь его нужно переложить в таблицу. предложи лучший способ "перекладывания" ? задача-то одна из прикладных. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 17:18 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
кит северных морей--Eugene--инсертел бы INSERT /*+APPEND PARALLEL*/ INTO ela_document_copy SELECT * FROM TABLE(:X), а коммит делал бы после примерно десяти таких инсертов отвалится уже на втором.сорян, забыл про параллельную херню ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 17:19 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
--Eugene--Elic--Eugene--, Кто тебе сказал, что нужен курсор?никто мне не говорил, это я спрашиваю: есть задача (для простоты понимания, представь, не связанная с данным топиком) - на входе имеется курсор известной структуры, и весь его нужно переложить в таблицу. предложи лучший способ "перекладывания" ? задача-то одна из прикладных. однопоточный FORALL + APPEND_VALUES без объектов. на тех объёмах, которые реалистично прочитать в коллекцию, вы не получите выигрыша от parallel dml. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 17:31 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
кит северных морей..APPEND_VALUES..слышал, будто от него пользы совсем не столько, сколько ожидаешь.. не уж то слухи? или он иначе работает в случае с FORALL ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 17:36 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
--Eugene--или он иначе работает в случае с FORALL ? Эээ... А он как-то может работать без forall? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 17:57 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
andrey_anonymousА он как-то может работать без forall?простой insert values не рассматриваете ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 18:11 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
--Eugene--andrey_anonymousА он как-то может работать без forall?простой insert values не рассматриваете ? В режиме append? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 18:17 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
andrey_anonymousВ режиме append?я к тому, что это тоже возможно ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 18:31 |
|
В чем может быть причина замедления FORALL INSERT?
|
|||
---|---|---|---|
#18+
--Eugene--кит северных морей..APPEND_VALUES..слышал, будто от него пользы совсем не столько, сколько ожидаешь.. не уж то слухи? или он иначе работает в случае с FORALL ? в написанном на скорую руку тесте получил выигрыш в 30 секунд - 90 секунд на forall append_values против 120 на conventional forall. судите сами. стоит отметить, что во многих случаях скорость далеко не единственный фактор при выборе. p.s. только сейчас вспомнил. если совсем делать нечего, можете ещё поиграться с parallel pipelined (пример есть у Тома по ссылке выше). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2019, 18:37 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1882245]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
100ms |
get tp. blocked users: |
2ms |
others: | 258ms |
total: | 450ms |
0 / 0 |