|
Базируется на : http://www.juliandyke.com/
В таблице ниже несколько способов
включить трассировку sql выражений.
Мои записки: краткое введение для
начинающих как получить план запроса, что
он содержит, как получить и
обработать trc файл с помощью tkprof, как понять
результаты обработки.
Не забудьте включить timed_statistics перед
сбором trace файла и снять ограничение на
размер trace файла !
alter session set timed_statistics=true
alter session set max_dump_file_size=unlimited
И конечно же если Вы хотите знать больше
про содержимое trace файла читайте Optimizing
Oracle Performance by Cary Millsap. Глава
1. Читать
больше.
| N по порядку |
Способ |
Примечание |
| На уровне
экземпляра |
| 1 |
trace_enabled = TRUE |
Устанавливается в
init.ora |
| 2 |
event="10046 trace name context
forever, level 8" |
Устанавливается в init.ora. Уровни ниже:
| 0 |
turn tracing off |
| 1 |
basic tracing (equivalent to ALTER SESSION set sql_trace TRUE) |
| 4 |
include bind information in the trace |
| 8 |
include event wait statistics in the trace |
| 12 |
include both event and bind statistics in the trace |
|
| 3 |
ALTER SYSTEM SET trace_enabled = TRUE; |
TRUE|FALSE |
| 4 |
ALTER SYSTEM SET EVENTS '10046 trace name
context forever, level 8'; |
уровень см. выше |
| В своей
сессии |
| 5 |
ALTER SESSION SET sql_trace = TRUE; |
устанавливает уровень
трассировки без связанных переменных и
ожиданий level =1
TRUE | FALSE |
| 6 |
ALTER SESSION SET EVENTS '10046 trace name
context forever, level 8'; |
описание уровней см.
выше |
| 7 |
EXECUTE dbms_session.set_sql_trace (TRUE); |
TRUE | FALSE |
| 8 |
EXECUTE dbms_support.start_trace (binds=>true,waits=>true); |
пакет dbms_support может
быть не установлен в БД. Вы найдете его в
директории $ORACLE_HOME/rdbms/admin для версии 8.1.7 и
выше, ниже на metalink см. Note:62294.1. |
| 9 |
oradebug event 10046 trace name context
forever, level 4 |
см. Note:1058210.6 |
|
В чужой
сессии
Можно включить timed_statistics и снять
ограничение на размер trace файла в чужой
сессии:
sys.dbms_system.set_bool_param_in_session( sid => 42,
serial# => 1215, parnam => 'timed_statistics', bval => true)
sys.dbms_system.set_int_param_in_session( sid => 42,
serial# => 1215, parnam => 'max_dump_intval => 2147483647)
|
| 10 |
EXECUTE
dbms_support.start_trace_in_session (9,29); |
параметры это sid и serial#
чужой сессии |
| 11 |
EXECUTE
dbms_system.set_sql_trace_in_session (9,29,TRUE); |
параметры это sid и serial#
чужой сессии а также хотите ли вы
включить (TRUE) или выключить трассировку (FALSE) |
| 12 |
EXECUTE dbms_system.set_ev
(9,29,10046,0,''); |
sid, serial, номер event'а,
уровень, имя события (?) |
| 13 |
sys.dbms_monitor.serv_mod_act_trace_enable(
service_name => 'APPS1',
module_name => 'PAYROLL',
action_name => 'PYUGEN',
waits => true,
binds => true,
instance_name => null) |
Этот способ доступен начиная
с 10g. Он помогает решить проблемы
возникающие при connection pooling или multitread
сервере, когда нам невозможно
определить sid и serial# нашей сессии.
источник "How to Activate Extended SQL Trace" by Cary
Millsap
|
| Включить
трассировку NET*8 (оптимизация сетевого
траффика - это важная составляющая
оптимизации !) |
| |
TRACE_LEVEL_<CLIENT/LISTENER/SERVER>=(0/4/10/16)
TRACE_DIRECTORY_<CLIENT/LISTENER/SERVER>=<directory name>
LOG_DIRECTORY_<CLIENT/LISTENER/SERVER>=<directory name>
TRACE_TIMESTAMP_<CLIENT/LISTENER/SERVER> = ON |
SQLNET.ORA for client or server,
LISTENER.ORA for listener:
см. Note:1030488.6
Читать про содержимое
trace файла. |
Хитом сезона конечно является триггер LOGON
ON позволяющий включить трассировку при
подключении определенного пользователя:
CREATE OR REPLACE TRIGGER SYS.TRACE_A_USER
AFTER
LOGON ON <some_db_user>.SCHEMA
DECLARE
user_sid NUMBER;
user_serial# NUMBER;
user_program VARCHAR2(48);
BEGIN
-- Collect the current user session details.
SELECT sid, serial#, UPPER(program)
INTO user_sid, user_serial#, user_program
FROM v$session
WHERE audsid = USERENV('SESSIONID');
-- Start tracing if the user is running the identified application.
IF user_program = 'SOMECODE.EXE' THEN
-- Enable tracing. Note level 12 tracing includes bind variable
-- and wait statistics.
sys.dbms_system.set_ev(user_sid, user_serial#, 10046, 12, '');
END IF;
END;
|