|
В чем может быть причина замедления 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 |
|
|
start [/forum/topic.php?fid=52&msg=39837094&tid=1882245]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 20ms |
total: | 175ms |
0 / 0 |