Trassirovka_diagnostic
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 ID
sid.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