Более полный мануал здесь — Как трассировать SQL и PL/SQL.

Как понять логику планировщика и оптимизатора Трассировка с 10053 event.

 

1. Включение режима трассировки и выполнение произвольной процедуры:

BEGIN
DBMS_SESSION.SESSION_TRACE_ENABLE;
ss_jobs_pkg.run_job(457633170401);
COMMIT;
DBMS_SESSION.SESSION_TRACE_DISABLE;
END;

В данном примере показан запуск задания с идентификатором 457633170401 в режиме трассировки сессии.

2. Если используется Oracle версии 11 или выше, результат трассировки хранится по адресу:

/opt/oracle/diag/rdbms/<db>/<db>/trace

В данной папке необходимо найти файл с расширением *.trc.

3. Полученный *.trc файл необходимо преобразовать в доступный для чтения формат утилитой tkprof, которая поставляется в комплекте с Oracle. Утилита располагается по адресу /opt/oracle/product/<номер версии>/bin/. Вызов осуществляется следующим образом:

oracle@server:~/product/11.2.0.2/bin$ tkprof <путь до *.trc файла>

При запуске утилита попросит указать путь до файла назначения. Можно использовать адрес домашней директории.

Чтобы профилировку было удобно анализировать, можно при этом еще добавить параметры для сортировки:

oracle@server:~/product/11.2.0.2/bin$ tkprof <путь до *.trc файла> SORT="(FCHELA,EXEELA)"

4. Включение режима трассировки для сессии:

         Если мы собираемся трассировать свою сессию, то необходимо выполнить команду:

ALTER session SET events '10046 trace name context forever, level N'; -- включение трассировки
ALTER session SET events '10046 trace name context off'; -- выключение трассировки

 

Если мы собираемся трассировать чужую сессию, то необходимо сначала выяснить sid, serial, выполнив команду:

COL sid FOR 999999
COL serial# FOR 999999
COL username FOR a20
COL osuser FOR a20
SELECT s.sid,
       s.serial#,
       s.username,
       s.osuser 
FROM   v$session s,
       v$process p
WHERE s.paddr=p.addr;

далее

EXEC SYS.DBMS_SYSTEM.SET_EV(sid,serial,10046,N,''); -- включение трассировки
EXEC SYS.DBMS_SYSTEM.SET_EV(sid,serial,10046,0,''); -- выключение трассировки

где sid, serial -- это понятно что, а N -- требуемый level  (уровень трассировки).

level 1 -- в trace файл пишется статистика вида ***, APPNAME, PARSING IN CURSOR, PARSE ERROR, PARSE, EXEC, FETCH, UNMAP, SORT UNMAP, ERROR, STAT и XCTEND
level 4 -- то же, что и в level 1 плюс BINDS секции.
level 8 -- то же, что и в level 1 плюс WAIT строки.
level 12 -- level 1 плюс level 4 плюс level 8.

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