Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помощь с расшифровкой TKPROF  [new]
esir
Member

Откуда:
Сообщений: 286
Привет, господа,

Попросили помочь с оптимизацией запроса, но я не силен в оптимизации оракловых запросов.

Прогнал трассировку для сессии:

begin 
dbms_system.set_ev(862, 7833, 10046, 8, ''); 
end; 
/


преобразовал через TKPROF :

tkprof work_ora_320.trc output=320.txt sort=(prsela,exeela,fchela)


На выходе файл с 23 запросами и самый тяжкий из них - тот который необходимо проанализировать:

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse       28      0.01       0.01          0          0          0           0
Execute     28      0.00       0.01          0          0          0           0
Fetch       28    376.75     378.90        207    5349593        224         346
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total       84    376.77     378.92        207    5349593        224         346



и вот такой тотал:

OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse      196      0.01       0.02          0          0          0           0
Execute    196      0.03       0.03          0          0          0           0
Fetch      197    437.61     442.69       3480    6280167        260         474
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total      589    437.66     442.75       3480    6280167        260         474

Misses in library cache during parse: 0

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                      3482        0.37          3.14
  SQL*Net message to client                     981        0.00          0.00
  SQL*Net more data to client                    62        0.00          0.00
  SQL*Net message from client                   981        0.20          6.78
  SQL*Net more data from client                1792        0.00          0.06
  direct path write temp                         28        0.00          0.00
  latch: row cache objects                        5        0.00          0.00
  latch: cache buffers chains                    12        0.00          0.00


OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        0      0.00       0.00          0          0          0           0
Execute 321307      9.39       8.90          0          0          0           0
Fetch   321307      6.86       7.09         86    1015917          0      321307
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total   642614     16.25      16.00         86    1015917          0      321307

Misses in library cache during parse: 0

Elapsed times include waiting on following events:
  Event waited on                             Times   Max. Wait  Total Waited
  ----------------------------------------   Waited  ----------  ------------
  db file sequential read                        86        0.00          0.02
  cursor: pin S                                  13        0.00          0.00

   23  user  SQL statements in session.
    0  internal SQL statements in session.
   23  SQL statements in session.




Насколько я понимаю так много PARSE для одно и того же запроса - это не гуд, но CPU и ELAPSED время минимально, и как правильно ли понял, что PARSE тут не такую и большую роль играет?

С оптимизацией знаком крайне поверхностно, от слова совсем, буду благодарен за указания в какую сторону копать.
27 ноя 18, 22:11    [21746660]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
run09
Member

Откуда:
Сообщений: 52
esir,

> Насколько я понимаю так много PARSE для одно и того же запроса - это не гуд

почитайте чем отличаются soft parse , от hard parse.
27 ноя 18, 22:19    [21746668]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
Melkomyagkii_newbi
Member

Откуда: из прошлого
Сообщений: 1859
esir,

Запрос выполняется в среднем за 13 секунд. Смотрите его план, раз уж вызвались.
27 ноя 18, 22:27    [21746672]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
Elic
Member

Откуда:
Сообщений: 29976
esir
буду благодарен за указания в какую сторону копать.
Копать нужно в сторону улучшения плохих чисел.
esir
Попросили помочь с оптимизацией запроса, но я не силен в оптимизации оракловых запросов.
С оптимизацией знаком крайне поверхностно, от слова совсем
Т.е. тот, кто просил хуже тебя только тем, что не умеет писать на форумы?


RTFM
27 ноя 18, 22:40    [21746682]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
esir
Member

Откуда:
Сообщений: 286
Melkomyagkii_newbi
esir,

Запрос выполняется в среднем за 13 секунд. Смотрите его план, раз уж вызвались.


Вызвались - громкое слово.
С моими опытом, такой план - пока только икоту вызывает, сказать, что я там много понял - нагло соврать.
Да что уж там, вот он:

К сообщению приложен файл (plan.txt - 94Kb) cкачать
27 ноя 18, 22:47    [21746685]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
esir
Member

Откуда:
Сообщений: 286
run09,

Спасибо, завтра проштудирую
27 ноя 18, 22:48    [21746687]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
Melkomyagkii_newbi
Member

Откуда: из прошлого
Сообщений: 1859
esir,

вам в форум работа. по крайней мере мне раньше платили за тюнинг подобных запросов.
27 ноя 18, 22:53    [21746691]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
esir
Member

Откуда:
Сообщений: 286
esir
Попросили помочь с оптимизацией запроса, но я не силен в оптимизации оракловых запросов.
С оптимизацией знаком крайне поверхностно, от слова совсем
Т.е. тот, кто просил хуже тебя только тем, что не умеет писать на форумы?


RTFM[/quot]

Там как я понял, совсем патовая ситуация и они вроде и знают больше, но решения найти не могут.
27 ноя 18, 22:53    [21746692]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
esir
Member

Откуда:
Сообщений: 286
Melkomyagkii_newbi
esir,

вам в форум работа.


Не совсем понял
27 ноя 18, 22:58    [21746695]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
Elic
Member

Откуда:
Сообщений: 29976
esir
совсем патовая ситуация и они вроде и знают больше, но решения найти не могут.
С таким-то планом 13 сек - это "летает"
27 ноя 18, 22:58    [21746696]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
Elic
Member

Откуда:
Сообщений: 29976
esir
Melkomyagkii_newbi
вам в форум работа.
Не совсем понял
В таком страшном "дерьме" захотеть что-то понять можно только за деньги.
27 ноя 18, 23:00    [21746697]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
esir
Member

Откуда:
Сообщений: 286
Elic
esir
пропущено...
Не совсем понял
В таком страшном "дерьме" захотеть что-то понять можно только за деньги.


а вот тут нельзя не согласиться!
27 ноя 18, 23:05    [21746699]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
Начните с простого: пересоберите статистику на таблицах и индексах.
Есть небольшой шанс, что cartesian и sort merge самоотменятся.
А вообще, не форумное это дело запросы такой сложности на общественных началах переписывать - ищите специалиста.
27 ноя 18, 23:12    [21746701]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
esir
Member

Откуда:
Сообщений: 286
andrey_anonymous,

да и мысли не было, на кого-то эту колбасу скидывать)
поделился чем богат, так сказать.

Вот про Parse уже подсказали почитать.
Вы вот про статистику сказали - но она ежедневно собирается, буду туда ещё копать может что и получиться.
27 ноя 18, 23:16    [21746703]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18337
esir
Вот про Parse уже подсказали почитать.

Не в нем проблема, хоть parse/execute и плохой. Лечится тривиально - заменой литералов на bind - но погоды в данном конкретном случае не сделает. А для ленивых можно и режимом шаринга курсоров сыграть.
Сам запрос излишне сложен - оптимизатору без подсказок при парсинге за вменяемое время физичеки не перебрать все варианты. Сталбыть, могут пригодиться инструменты управления планом - тут сообразно с версией сервера, этот инструментарий менялся.
Если позволяет лицензия - испробуйте возможности автотюнинга.
Некоторые вещи можно решить мат. представлениями + query rewrite.
Когда дойдете до переписывания самого запроса:
Дистинкты и самосоединения из плана выпирают весьма выпукло даже без текста запроса, их по мере таланта и владения мат.частью следовало бы малость подсократить.
Кроме того, в некоторых случаях имеет смысл по возможности скорректировать модель данных, хотя обычно это выливается в сроки и трудозатраты.
27 ноя 18, 23:35    [21746720]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
Elic
Member

Откуда:
Сообщений: 29976
andrey_anonymous
хоть parse/execute и плохой
Не страшное соотношение. А для PL/SQL вообще нормальное. Боязнь этого соотношения - это скорее миф.
andrey_anonymous
Лечится тривиально - заменой литералов на bind
И как же это поможет соотношению?
27 ноя 18, 23:51    [21746729]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
xtender
Member

Откуда: Мск
Сообщений: 5704
esir,

не с того начинаете... Во-первых, если уж трейсите, то трейс надо было выкладывать сырой, а не огрызок ткпрофный, вместо куска экслейна - реального план со статистиками, во-вторых, раз уж в запросе куча PL/SQL-ных функций, то и их тоже надо показать, в-третьих, очевидно, что этот запрос надо внимательно проанализировать и упростить, т.к. даже без текста запроса видно кучу похожих семиджойнов, WINDOW SORT/BUFFER и сортировок на разных уровнях, а без текста запроса никто вам ничего не подскажет...
Догадки, конечно, строить можно, учитывая, что ясно видно, что практически все время провисело на CPU, но если хотите точных ответов, то и предоставляйте всю необходимую информацию.
Если хотите мучаться пробуя различные догадки, то для затравки:
постараться уменьшить:
1. кол-во вызовов PL/SQL функций
2. кол-во вызовов аналитики или хотя бы постараться "схлопнуть" ее на один уровень.
28 ноя 18, 00:58    [21746740]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с расшифровкой TKPROF  [new]
esir
Member

Откуда:
Сообщений: 286
xtender
esir,

не с того начинаете... Во-первых, если уж трейсите, то трейс надо было выкладывать сырой, а не огрызок ткпрофный, вместо куска экслейна - реального план со статистиками, во-вторых, раз уж в запросе куча PL/SQL-ных функций, то и их тоже надо показать, в-третьих, очевидно, что этот запрос надо внимательно проанализировать и упростить, т.к. даже без текста запроса видно кучу похожих семиджойнов, WINDOW SORT/BUFFER и сортировок на разных уровнях, а без текста запроса никто вам ничего не подскажет...
Догадки, конечно, строить можно, учитывая, что ясно видно, что практически все время провисело на CPU, но если хотите точных ответов, то и предоставляйте всю необходимую информацию.
Если хотите мучаться пробуя различные догадки, то для затравки:
постараться уменьшить:
1. кол-во вызовов PL/SQL функций
2. кол-во вызовов аналитики или хотя бы постараться "схлопнуть" ее на один уровень.



Спасибо за советы, передал разработчикам.
Если интересно посмотреть - в ссылку гугловская директория с заархивированным трейсом и *.sql файлом запроса.
http://bit.ly/2r8GsNS

xtender
вместо куска экслейна - реального план со статистиками

Не совсем понимаю, имеется ввиду вот таким образом собрать статистику?

 /*+ gather_plan_statistics */

SELECT *
FROM table(DBMS_XPLAN.DISPLAY_CURSOR(FORMAT=>'ALLSTATS LAST ALL +OUTLINE'));
28 ноя 18, 11:49    [21747063]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить