|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
Есть приложение с закрытым ядром . В нем есть генерируемый запрос, который считает данные по одной табличке через count(*). Данных в табличке собралось очень много (1млрд). И запрос соответственно начал подвисать. А приложуха отваливаться из-за различных таймаутов. Сам запрос, не особо критичный для работы, и не несет каких либо важных данных, тем более можно вручную эти данные вытаскивать. Поэтому чтобы не ломать работу приложения, уже начаты работы по оптимизации, но это все в не быстро. А на быстрое решение пытался сделать 2 варианта. 1. Подмена запроса через Код: plsql 1.
попытался перехватить запрос, и добавить ему условие Код: plsql 1.
На простых запросах получилось это сделать, но именно на моем запросе, с использованием bind переменных и несколькими подзапросами, данный механизм отказался работать. 2. Добавление хинта PARALLEL(N) После нескольких экспериментов, получилось сильно ускорить запрос только с помощью хинта parallel(32). Вместо 3-5 минут, выполняется за 10-40 секунд. Теперь пытаюсь подменить план запроса, baseline создается на этот запрос, но план все равно используется старый. При удалении родного baseline, он просто пересоздается, и опять использует свой план. Использую следующий механизм из одного форума: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
что не хватает ему? или может есть другие способы заставить не редактируемый запрос работать с параллельностью? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 15:29 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
Да, версия: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 15:31 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
dimyaz, У SQL Baseline есть ряд ограничений (DocID: 2308153.1). И есть баги, связанные, в частности, с вызовом из PL/SQL с биндами. Так же есть документ многообещающим названием "How to Diagnose Issues where a SQL Plan Management (SPM) Baseline is Not Used" (DocID: 1663691.1). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 16:15 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
dimyaz, И вообще, что выдает БД после применения "механизма с форума"? Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 16:52 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
dimyaz, 1. вместо подмены запроса, можно просто навесить ивент останавливающий данный запрос через control_c: https://www.freelists.org/post/oracle-l/sql-text-during-parsing,30 https://twitter.com/dbms_xtender/status/1392499158368624641 Код: plsql 1. 2.
2. вместо сложного бейслайна(еще и требующего купленного пака), лучше бы воспользовались простым и доступным для всех SQL Patch - он чуть надежнее в данном случае, т.к. при парсе просто и безусловно добавляет хинты. Но в целом, все равно вам нужен разрешенный parallel query на уровне сессии. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 17:17 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
Sayan Malakshinov, Код: sql 1.
А что он возвращает в ответ после перехвата? Потому-что сейчас приложение ругается, что не может выполнить запрос этот. Но отрабатывает быстро) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 17:40 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
dimyaz, ORA-01013: user requested cancel of current operation. К сожалению не подходит, так как в этой сессии это не единственный запрос, и ее не нужно всю грохать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 17:55 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
Asmodeus, SQL_HANDLE SQL_295037bb56d51e83 SQL_TEXT <CLOB> PLAN_NAME SQL_PLAN_2kn1rrdbda7n3a66eba26 CREATOR USERYORIGIN MANUAL-LOAD-FROM-CURSOR-CACHE PARSING_SCHEMA_NAME USERX DESCRIPTION VERSION 12.2.0.1.0 CREATED 30-NOV-21 09.19.42.000000 PM LAST_MODIFIED 30-NOV-21 09.19.42.000000 PM LAST_EXECUTED LAST_VERIFIED ENABLED YES ACCEPTED YES FIXED YES REPRODUCED YES AUTOPURGE YES ADAPTIVE NO OPTIMIZER_COST 83888 MODULE PL/SQL Developer ACTION Command Window - New EXECUTIONS 1 ELAPSED_TIME 73157769 CPU_TIME 59236650 BUFFER_GETS 3064030 DISK_READS 334 DIRECT_WRITES 0 ROWS_PROCESSED 1 FETCHES 1 END_OF_FETCH_COUNT ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 18:25 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
dimyaz, А в сесси, в которой работает приложение, разрешено параллельное выполнение (как Саян спрашивал)? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2021, 19:52 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
Asmodeus dimyaz, А в сесси, в которой работает приложение, разрешено параллельное выполнение (как Саян спрашивал)? namevaluerecovery_parallelism 0fast_start_parallel_rollback FALSEparallel_min_percent 0parallel_min_servers 176parallel_max_servers 1760parallel_instance_group parallel_execution_message_size 16384parallel_degree_policy MANUALparallel_adaptive_multi_user FALSEparallel_threads_per_cpu 2parallel_min_time_threshold AUTOparallel_degree_limit CPUparallel_force_local FALSEparallel_servers_target 704containers_parallel_degree 65535 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 08:27 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
Asmodeus, Код: sql 1. 2.
PDML_ENABLED PDML_STATUS PDDL_STATUS PQ_STATUSNO DISABLED ENABLED ENABLED ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 08:32 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
dimyaz, Вы хинты бейслайна то проверили? Уверены, что там есть хинт parallel? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 08:34 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
А вообще я выше сказал, сделали бы sql патч с хинтом parallel и не парились... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 08:36 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
dimyaz, parallel_min_servers=176? Жестоко... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 08:37 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
Sayan Malakshinov dimyaz, Вы хинты бейслайна то проверили? Уверены, что там есть хинт parallel? Код: plsql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 08:40 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
dimyaz На простых запросах получилось это сделать, но именно на моем запросе, с использованием bind переменных и ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 08:45 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
Sayan Malakshinov dimyaz На простых запросах получилось это сделать, но именно на моем запросе, с использованием bind переменных и Пробовал, не получается. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Пусть это будет наш целевой запрос для перехвата: Код: sql 1. 2. 3. 4.
COUNT(*)1 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
Код: plsql 1. 2. 3. 4.
COUNT(*)0 Код: plsql 1. 2. 3. 4. 5.
COUNT(*)1 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 12:06 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
Sayan Malakshinov Sayan Malakshinov dimyaz, Вы хинты бейслайна то проверили? Уверены, что там есть хинт parallel? Код: plsql 1.
Да, план, тот который я ожидаю и внизу дописан такой нот Note ----- - dynamic statistics used: dynamic sampling (level=7) - Degree of Parallelism is 32 because of hint ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 12:41 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
А так? dimyaz Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 13:16 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
andrey_anonymous А так? dimyaz Код: sql 1. 2. 3. 4. 5. 6. 7.
тоже пробовал и RECURSIVE и TEXT_MATCH не срабатывает, даже на это примере ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 13:42 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
Sayan Malakshinov А вообще я выше сказал, сделали бы sql патч с хинтом parallel и не парились... Это помогло Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Страничка открывает быстро. но теперь по перформансу пошли конкуренции ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 13:45 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
dimyaz Sayan Malakshinov пропущено... Код: plsql 1.
Да, план, тот который я ожидаю и внизу дописан такой нот Note ----- - dynamic statistics used: dynamic sampling (level=7) - Degree of Parallelism is 32 because of hint ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 15:02 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
Sayan Malakshinov, Только в таком виде: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 15:32 |
|
Замена плана запроса на план с Parallel хинтом
|
|||
---|---|---|---|
#18+
dimyaz, ну, что, собственно, и следовало ожидать - нет хинта - нет параллели. Вместо создание бейслайна через копирование, надо было создавать со своим, вручную созданным списком хинтов... ну и про переписывание: сейчас этот кривой и ограниченный rewrite equivalence не актуален. Пользуйтесь SQL Translation framework : он поддерживает бинды. Простой пример: DBMS_SQL_TRANSLATOR Код: 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.
output Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2021, 16:13 |
|
|
start [/forum/topic.php?fid=52&msg=40116738&tid=1879696]: |
0ms |
get settings: |
3ms |
get forum list: |
6ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
38ms |
get topic data: |
4ms |
get forum data: |
1ms |
get page messages: |
451ms |
get tp. blocked users: |
1ms |
others: | 276ms |
total: | 782ms |
0 / 0 |