|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
Возвращаю процедурой курсор, по непонятной причине зависаю при попытке открыть содержимое курсора. Запуск самого запроса из процедуры работает молниеносно; если выключить любой из двух запросов, сцепляемых через union all, процедура так же отрабатывает быстро. Структура процедуры: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 11:57 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
disgust, Приведите реальный текст вашего запроса. "Дьявол скрывается в деталях". ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 12:30 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
disgust, юнион точно с all? ...... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 12:35 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
Вызов процедуры с одним из двух подзапросов curr day / prev days работает отлично. Выполнение запроса целиком с подстановкой параметров также не выявляет никаких проблем, план запроса прекрасный. Полный код процедуры: Код: 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. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 12:45 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
Методика решения подобных проблем одна: смотрите планы исполнения (dbms_xplan.display_cursor, sql_id найдете в v$session), анализируете. Если есть tuning pack, то можно воспользоваться SQL Monitor-ом. На основании раскопанного много думаете и корректируете. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 12:47 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
disgust Код: plsql 1.
ууу.... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 12:48 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
andrey_anonymous, Вообще не уууу, работает без проблем с производительностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 12:50 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
disgust работает без проблем с производительностью. Очевидно, мне рановато давать советы такому мастеру оптимизации, как Вы. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 12:54 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
andrey_anonymous, Советы давать не рано, но существенного влияния на производительность паждинатор не оказывает. Фетч курсора виснет вне зависимости от накладывания оконной функции, при этом тесты показывают, что к проблемам приводит юнион, о чём и был задан вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 13:00 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
disgust, как вариант по receipt_date есть индекс, c union all он "не используется" ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 13:20 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
disgust существенного влияния на производительность паждинатор не оказывает. Я же говорю - Ваше кунг-фу круче моего. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 13:21 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
Stax как вариант по receipt_date есть индекс, c union all он "не используется" Ставлю на сортировку результата объединенного union all множества для нужд "паджинатора". Но он "влияния не оказывает", так что ТС может продолжать изыскания... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 13:23 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
andrey_anonymous Я же говорю - Ваше кунг-фу круче моего. Да нет, конечно. offset мне в оракл ещё не подвезли, паджинатор через row_number() не идеален, но справляется. Но можете и дальше обижаться. За совет про dbms_xplan.display_cursor спасибо, пока нет возможности воспользоваться, грантов не хватает. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 13:26 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
andrey_anonymous, отключённая паджинация никак не повлияла, об этом я уже писал. и всё равно непонятно, почему вне процедуры запрос не тормозит. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 13:28 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
disgust andrey_anonymous, отключённая паджинация 1. Убирать надо оконную функцию. 2. Методику разборок я уже привел - dbms_xplan.display_cursor в помощь, остальное - от лукавого. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 13:30 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
disgust и всё равно непонятно, почему вне процедуры запрос не тормозит. 1) возможно разные параметры оптимизатора, напр first/all rows 2) возможно не все сроки фетчите 3) select count(поля) from ( ... тож за разное время выполняется в процедуре и вне? 4) бинд в процедуре и константы во вне (плюсе) 5) еще что-то зы просить ДБА чтоб снял трассу для обоих случаев ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 13:44 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
andrey_anonymous Stax как вариант по receipt_date есть индекс, c union all он "не используется" Ставлю на сортировку результата объединенного union all множества для нужд "паджинатора". Но он "влияния не оказывает", так что ТС может продолжать изыскания... +1 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 15:04 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
disgust andrey_anonymous, отключённая паджинация никак не повлияла... "Не верю!" (с) Склихасовский Сколько всего строк выбирает этот запрос без "паджинации"? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 15:07 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
SQL*Plus Сколько всего строк выбирает этот запрос без "паджинации"? 68, выборка небольшая. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 15:26 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
Дык может и проверить планы с "паджинацией" и без? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2021, 15:51 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
case solved, достучался до админов, получил план оптимизатора при выполнении запроса в процедуре. оптимизатор каким-то мистическим образом решил начать сканить scheme.sales_details по другому индексу, вылечилось хинтом. всем спасибо за участие, советы и саркастичные комментарии. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2021, 13:08 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
disgust case solved, достучался до админов, получил план оптимизатора при выполнении запроса в процедуре. оптимизатор каким-то мистическим образом решил начать сканить scheme.sales_details по другому индексу, вылечилось хинтом. всем спасибо за участие, советы и саркастичные комментарии. такой эффект обычно получается на маленьких таблицах при изобилии индексов, подходящих под условие запроса. Надо либо порядка на четыре - пять увеличить объем данных в таблице scheme.sales_details, либо дропнуть бессмысленные индексы, начиная с самого бессмысленного, или, как-то заменить на осмысленные. Тогда и без хинтов, скорее всего, все придет в норму. Когда таблица маленькая, и размеры ключа в индексах отличаются, оптимизатор имеет обыкновение считать, что для такой таблицы, из всех бессмысленных, но подходящих под условия запроса индексов, надо просто взять тот, у которого самый короткий ключ. Отсюда возникают хинты. Кстати, на индексы хинты, исторически, достаточно хрупкие. Оптимизатор следует им, до тех пор, пока, в процессе своей деятельности, не посчитает их полнейшей дурью. Правда, обычно, он может хотя бы косвенно объяснить, почему он так подумал. Например, потому что решил, что раз объем данных возрос, то пора переходить от nested loop join к hash join. В таких обстоятельствах, с любовью указанный вами индекс, оптимизатором может быть признан за чистый мусор. Тогда вам придется ему объяснять: "Дорогой, тебе хеш джойн нельзя, колокольчик в нос вставь и пользуйся нестед лупом с помощью указанного мной индекса". ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2021, 14:21 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
booby, Понятно, что жёстко прибивать гвоздями индекс - не самый хороший вариант. Сейчас таблица ~24кк строк, прирастает на 3-4кк в месяц. Вероятно, стоит поубивать все те индексы, которые явно не берутся оптимизатором и попробовать выключить хинт. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2021, 14:42 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
disgust, вы постарайтесь поострожнее обходиться с такими приговорами. При вынесении приговора будет хорошо, если вы точно понимаете за что приговаривается, и должна ли быть приговорённому замена, или и так сойдет. Если не знаете, зачем он создавался, и не можете самостоятельно определить правдоподобную версию, лучше ничего не делать, или, хотя бы спросить у кого-то - "о чём ты думал?". Убить и посмотреть, кто заплачет - может быть вариантом, но, предпочтительно, не в боевом окружении, где может прилететь ответка за опрометчивые атакующие действия. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2021, 15:45 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
booby ... Кстати, на индексы хинты, исторически, достаточно хрупкие. Оптимизатор следует им, до тех пор, пока, в процессе своей деятельности, не посчитает их полнейшей дурью. ... Оптимизатор не посчитает их "полнейшей дурью" и будет следовать им всегда, если может их применить . И откажется только в случае их полной невозможности, например, когда сам же перепишет запрос при преобразованиях в такой вид, где захинтованный индекс в принципе неприменим или другие хинты/настройки оптимизатора помешают. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2021, 16:50 |
|
|
start [/forum/topic.php?fid=52&msg=40114114&tid=1879736]: |
0ms |
get settings: |
7ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
35ms |
get topic data: |
3ms |
get forum data: |
1ms |
get page messages: |
489ms |
get tp. blocked users: |
1ms |
others: | 280ms |
total: | 824ms |
0 / 0 |