|
Падает производительность при 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 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
AlexFF__|, это масляное масло. применит, если сможет, а если не сможет, то откажется. Он же сначала трансформирует запрос, если это явно не запрещено, а только потом будет разбираться с тем, что ему там знатоки хинтов понаписали. К сожалению , даже если на самом деле после трансформации выбранный хинтователем индекс нежелателен, оптимизатор до последнего будет пытаться его применить, прежде чем отбросить. Это неоднозначный вопрос вот каком отношении - удачный хинт в сложном запросе скорее наведет оптимизатор на благоприятный план, а неудачный, но следуемый после трансформации - скорее принесет вред. В простых случаях все просто, и у хинтователя есть много больше прав на претензию, что он умнее оптимизатора. А в случаях сложных соединения/агрегации множества таблиц, все может становится весьма болезненным с точки зрения производительности, при попытках оптимизатора следовать за хинтами, по крайней мере хинтами над индексами, чуждого ему писателя sql, и особенно, если тот писатель не вполне понимает, что делает. Что, к сожалению, совсем нередко встречается. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2021, 17:18 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
booby если тот писатель не вполне понимает, что делает. Что, к сожалению, совсем нередко встречается. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2021, 02:20 |
|
Падает производительность при union all в курсоре
|
|||
---|---|---|---|
#18+
реальность всегда состоит из компромиссов. Когда у общества нет цветовой дифференциации штанов системы некачественные статистики, межумочные объемы данных и случайное индексирование, ее поведение характеризуется как почти женское, в смысле непредсказуемости, не говоря о вероятных чудесах при обновлении версии системы. Как-то "вчера поставил хинт, а сегодня убрал, но вчера поставил" приходится с ней общаться. В общем, это +- околорабочее "взрослое" состояние. Вот, кстати, говорят - "старый, что малый". Одна из общих черт заключается в том, что малый еще не знает, что такое компромисс, а старый уже не склонен к нему. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2021, 02:37 |
|
|
start [/forum/topic.php?all=1&fid=52&tid=1879736]: |
0ms |
get settings: |
25ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
488ms |
get tp. blocked users: |
2ms |
others: | 362ms |
total: | 958ms |
0 / 0 |