Trassirovka_diagnostic

Last modified by Cozlovschii Dmitrii on 2016/07/19 11:00

1 :  Материал на сайте Oracle : https://support.oracle.com/epmos/faces/MosIndex.jspx

Инструкции :

1. Если нет возможности выполнить команду alter session в диагностируемой сессии, 

   то нужно определить sid и serial# нужной сессии - по view v$session.

2. Включить трассировку:

   2.1 Если есть возможность выполнить в диагностируемой сессии, то:

       alter session set events '10046 trace name context forever, level 12'

       Вместо 12 могут быть установлены другие уровни, подробности - по ссылке в конце описания.

   2.2 Если включение выпоняется из другой сессии, то:

   Вместо sid, serial# - значения, найденные на первом шаге.

   begin 

     dbms_system.set_ev(sid,serial#,10046,12,''); 

   end;

   Трассировку желательно включить непосредственно перед выполнением проблемного действия,

   чтобы уменьшить объём не несущих пользы дял диагностики данных.

   2.3 STATISTICS_LEVEL (опционально)

       Значение по умолчанию для параметра statistics_level = typical. При таком значении

       детальная статистика выполения запроса (row source execution statistics) может

       содержать существенную погрешность. Если есть подозрения на ошибки подсчёта статистики

       выполения, можно повторить трассировку с включённым

       alter session set statistics_level = all

       При этом возможно и увеличение общего времени выполения запроса из-за доп. нагрузки на

       более точный подсчёт статистики, особенно при большом количестве относительно быстрых

       операций (nested loops).

       

3. Выполнить проблемное действие в программе.

   

4. Дождаться окончания работы в приложении и закрыть программу (завершить сессию).

   Если не завершить сессию (не закрыть программу), то часть необходимой информации не 

   попадёт в трэйс-файл. Перед закрытием программы, из диагностируемой сессии нужно

   выполнить (если есть возможность) следующие команды:

   alter session set session_cached_cursors = 0;  -- закрытие кэшированных курсоров

   alter session set events '10046 trace name context off'; -- отключение трассировки

   Именно при закрытии курсоров в трэйс файл попадает информация о плане выполения запросов.

5. Проверить, сформировался ли трэйс-файл.

   - В обычной конфигурации трэйс-файлы формируются в папаке udump.

     Найти путь к udump можно так:

     select value from v$parameter where name='user_dump_dest'

     Если сервер рабоатет в Shared Server Mode, а также если диагностируемая сессия - job 

     или другой backgroup процесс, то трэйс будет сформирован в папке bdump.

     select value from v$parameter where name='backgroud_dump_dest'.

     (В 11g условия изменились).

   - Трэйс должен содержать строку вида:

     ~*** SESSION IDemoticon_unhappysid.serial#)  <дата и время>

     где sid и serial# - из первого пункта

   - Если трэйс не сформировался, необходимо повторить процедуру.

     Возможно, была некорректно идентифицирована нужная сессия.

6. Обработать полученный файл при помощи tkprof.

   Необходимо получить 4 файла, обработанных tkprof - без сортировки, 

   с сортировкой sort=prsela, sort=exeela, sort=fchela.

 Пример: (имя файла трассировки - catalog_ora_2384.trc)

 Вызов tkprof из командной строки:

 При каждом вызове необходимо указывать новое имя файла, чтобы не перекрыть уже имеющиеся.

 Удобно добавлять суффикс с первой буквой параметра сортировки.

 1) tkprof catalog_ora_2384.trc catalog_ora_2384.out sys=no

 2) tkprof catalog_ora_2384.trc catalog_ora_2384_p.out sys=no sort=prsela

 3) tkprof catalog_ora_2384.trc catalog_ora_2384_e.out sys=no sort=exeela

 4) tkprof catalog_ora_2384.trc catalog_ora_2384_f.out sys=no sort=fchela

7. Для дальнейшего анализа нужны все полученные на выходе tkprof файлы и файл трассировки.

Доп. информация: http://www.sql.ru/faq/faq_topic.aspx?fid=389

--------------------------------------------------------------------------

/*Включение трассировки для конкретной сессии

SID=12, SerialNum=26423, тип трассировки - 12*/

begin

  dbms_system.set_ev(12,26423,10046,12,'');

end;

-- Отключение трассировки

begin

  dbms_system.set_ev(12,26423,10046,0,'');

end;

---- CMD

cd E:\oracle\diag\rdbms\trial\trial\trace //Ora11

E:

tkprof trial_ora_2236.trc trial_ora_2236.out sys=no  //все 

tkprof trial_ora_2236.trc trial_ora_2236.out sys=no sort=fchela //только fetch