|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Добрый день! Очередной раз прошу помощи сообщества, видимо общая обстановка уже сказывается, не могу понять, что происходит в базе: Есть таблица T, в которой есть 40 тысяч записей, есть запрос, который считает некий параметр для 2 процентов строк таблицы, т.е. выдаёт 800 строк. Скорость выполнения запроса - 1 секунда. Скорость получения ключей всей таблицы - 2 секунды. Общий запрос, включающий присоединения первого запроса к ключам таблицы уходит в себя и возвращается через 600-700 секунд. Схема того как это выглядит: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
План запроса говорит, что сначала выполняется запрос к вьюшке, а потом происходит INDEX FAST FULL SCAN по первичному ключу таблицы T. Возникает вопрос - откуда появились дополнительные 597 секунд и как от них избавиться? с уважением, Дмитрий Жучков ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 08:16 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Dimkas План запроса говорит, что сначала выполняется запрос к вьюшке, а потом происходит INDEX FAST FULL SCAN по первичному ключу таблицы T. Нам тоже план покажите. Dimkas Возникает вопрос - откуда появились дополнительные 597 секунд и как от них избавиться? А на этот вопрос ответ есть в gather_plan_statistics или в SQL Monitor'е. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 08:38 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
PuM256, да-да, готовлю, и план и результаты трассировки... отвлекают усиленно :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 08:53 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Dimkas, 40тыс ето мало, мож время сеть пожирает зы count(*) через аналитику не проще посчитать (или схема очень приблизительна)? .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 09:05 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Из первых проблесков понимания что происходит - всё трассировка сессии забита ожиданиями типа Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 09:09 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Stax, схема полностью условна, реальность как всегда сложнее ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 09:10 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Реальность вот такая - запрос из вьюшки: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 09:21 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Запрос части ключей из основной таблицы - для полноты картины Код: 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.
получение мгновенное, 3.3 секунды это фетч на клиента ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 09:25 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
ну и финальный запрос - время выполнения 330 секунд, получено только 100 строк - это я не стал качать все результаты на клиента Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 09:37 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Вот такая картина. Буду благодарен если кто-то подскажет куда копать. Я сам вижу только невесть откуда взявшиеся миллионы строк в плане полного запроса - число 47859981 напротив строки Код: plsql 1.
и многочисленные события ожидания asynch descriptor resize, которые, вроде, не оказывают влияния на время выполнения, т.к. суммарное время ожидания никакое ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 09:49 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
а вот и странное на первый взгляд решение нашлось - вот здесь переписываем запрос с использования WITH на явный подзапрос и всё внезапно налаживается: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
как говорится, всем спасибо за помощь и внимание :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 10:03 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
для истории - итоги патча с переносом подзапроса из WITH в FROM Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 10:08 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Dimkas, просто интересно (+), обязателен? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 10:24 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Stax, досмотрел IDPRC >= 47489 ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 10:36 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Stax, да, по условиям задачи нужно выбрать 40 тысяч строк и чтобы у 800 из них был заполнен указанный параметр, без плюса в итоге будет ровно 800 строк ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 10:38 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Stax досмотрел IDPRC >= 47489 а это magic number вестимо :) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 10:40 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
а самое печальное, что в реальном (не тестовом) запросе подобных подзапросов 3 штуки и их перенос из WITH во FROM ничего не дал :( логи сессии по-прежнему прирастают событиями "asynch descriptor resize" и запрос висит наглухо, дождаться исполнения пока не удалось ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 11:31 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Dimkas а самое печальное, WITH материализовать? ps считать count-ы аналитикой ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 11:42 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
andrey_anonymous да-да, читал, пункт 2 оттуда помог наладить тестовый запрос, но боевой сложнее в 3 раза и на нём не сработало, временно убрал проблемные подзапросы из боевого запроса, сижу думаю ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 12:42 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Stax WITH материализовать? ps считать count-ы аналитикой ..... stax уже материализованны прошлогодние данные, если материализовать данные этого года, то их придётся обновлять, своя морока в тестовом варианте запроса сработало решение с переносом подзапроса из WITH во FROM - постараюсь допилить и в боевом ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 12:45 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Dimkas, я имел ввиду добавить в with хинт /*+ materialize */ (или c rownum для старых версий) .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 13:02 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Stax Dimkas, я имел ввиду добавить в with хинт /*+ materialize */ (или c rownum для старых версий) .... stax или я что-то путаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 13:46 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Stax я имел ввиду добавить в with хинт /*+ materialize */ (или c rownum для старых версий) вот тут пожалуйста поподробнее - хинт /*+ materialize */ ощутимо ничего не меняет, видимо это связано с версией - Код: plsql 1.
явное добавление rownum в выборку тоже никак не влияет - или его еще как-то использовать надо в основном запросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 13:48 |
|
Скорость выполнения подзапроса
|
|||
---|---|---|---|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
или Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Не дают изменения в скорости запроса? Можно еще попробовать хинты merge(PRSLOTS_1_AGG) no_merge(PRSLOTS_1_AGG) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2020, 14:29 |
|
|
start [/forum/topic.php?fid=52&fpage=40&tid=1881039]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 161ms |
0 / 0 |