1. Oracle Workshop I
Session Tracing
H. Ciganek
03.08.2007 1
Agenda
• Tracing
• Tracing in eigener und fremder Session
• Tracing in der Webanwendung (mehrere Session)
• Diagnostisches Ereignis + Levels für Tracing
• Trace Analyzer (TRCANLZR)
03.08.2007 Oracle Workshop - Session Tracing 2
1
2. Tracing - Definition
Tracing Ablaufverfolgung zur (Performance-) Analyse oder Fehlersuche
Oracle SQL Tracing
• Identifikation der Top SQL Abfragen
• Explain Plan
• Call summary (parse, execute, fetch)
• I/O für Objekte
• Werte für Bind Variables
• CBO Statistiken
• Hot Blocks
• Wait Events
• Latches
03.08.2007 Oracle Workshop - Session Tracing 3
Tracing – gängige Befehle
(set autotrace on)
alter system|session set sql_trace=true;
exec dbms_session.set_sql_trace(true);
exec dbms_support.start_trace_in_session (sid, serial#);
exec dbms_system.set_sql_trace_in_session (sid, serial#, sql_trace);
exec dbms_monitor.session_trace_enable (session_id, serial#, waits, binds);
exec dbms_monitor.client_id_trace_enable (client_id, waits, binds);
Neu bei 10gR2
exec dbms_monitor.SERV_MOD_ACT_TRACE_ENABLE(SERVICE_NAME, MODULE_NAME,
ACTION_NAME, WAITS, BINDS, INSTANCE_NAME);
Trace-Datei Server Verzeichnis Parameter USER_DUMP_DEST
03.08.2007 Oracle Workshop - Session Tracing 4
2
3. Tracing in eigener Session
Metalink Note: 376442.1
-- 1. Einstellungen ---------------------------
alter session set timed_statistics = true;
alter session set statistics_level = all;
alter session set max_dump_file_size = unlimited;
-- 2. Tracing starten --------------------------
alter session set events '10046 trace name context forever,level 12';
-- 3. Trace-File Name abfragen -----------------
oradebug setmypid
oradebug tracefile_name
-- 4. >> Hier Abfragen zum Tracen absetzen ------
Select * from ......
-- 5. Tracing beenden ---------------------------
alter session set events '10046 trace name context off';
-- 6. Traceanalyzer starten ---------------------
03.08.2007 Oracle Workshop - Session Tracing 5
Tracing in fremder Session
Metalink Note: 1058210.6
-- 1. Einstellungen ------------------------------------------------------
alter system set timed_statistics = true SCOPE=BOTH;
alter system set statistics_level = all SCOPE=BOTH;
alter system set max_dump_file_size = unlimited SCOPE=BOTH;
--2. Processe abfragen ---------------------------------------------------
select s.paddr,s.username, p.pid,p.spid
from v$session s, v$process p
where s.paddr=p.addr
and s.username = 'TEST1';
/*
PADDR USERNAME PID SPID
---------------- ------------------------------ ---------- ------------
000007FF8F2E05C8 TEST1 15 7176
*/
-- 3a. Process einbinden mit Oracle Prozess Id ---------------------------
oradebug setorapid &PID
-- 3b. Process einbinden mit Betriebsystem Prozess Id --------------------
oradebug setospid &SPID
-- 4. Tracing starten ----------------------------------------------------
oradebug event 10046 trace name context forever, level 12
-- 5. Trace-File Name abfragen -------------------------------------------
oradebug tracefile_name
-- 6. >> Hier die Anwendung oder Maske in der fremder Session benutzen ---
-- 7. Tracing ausschalten ------------------------------------------------
oradebug event 10046 trace name context off
-- 8. Traceanalyzer starten ----------------------------------------------
03.08.2007 Oracle Workshop - Session Tracing 6
3
4. Webanwendung Tracing – Teil 1
Metalink Note: kein
-- 0. Vorbereitung ---------------------------------------------------------
-- 0.A – Neuen Oracle Service extra für Tracing erstellen ->
alter system set service_names='INTDEV05.int.lidl.net','TRACE_INTDEV05.int.lidl.net' SCOPE=BOTH;
-- 0.B – Extra Eintrag mit neuem Service in TNSNAMES.ORA
-- 0.C – Zusätzliche Konfiguration des AppServer für neuen Service
-- 0.D – UDUMP täglich entleeren dbms_scheduler
-- 1. Einstellungen --------------------------------------------------------
alter system set timed_statistics = true SCOPE=BOTH;
alter system set statistics_level = all SCOPE=BOTH;
alter system set max_dump_file_size = unlimited SCOPE=BOTH;
-- 2. Tracing starten ------------------------------------------------------
exec dbms_monitor.SERV_MOD_ACT_TRACE_ENABLE ('TRACE_INTDEV05.int.lidl.net', BINDS =>
TRUE);
-- 3. Tracing abfragen -----------------------------------------------------
select * from DBA_ENABLED_TRACES ;
03.08.2007 Oracle Workshop - Session Tracing 7
Webanwendung Tracing – Teil 2
-- 3. >> Hier die Webanwendung benutzen -------------------------------------
..........
-- 4. Optional Tracing ausschalten ------------------------------------------
--Exec dbms_monitor.SERV_MOD_ACT_TRACE_DISABLE ('TRACE_INTDEV05.int.lidl.net');
-- Metalink Note: 280543.1
-- 5. Tracefiles Mergen --- >> dbms_scheduler -------------------------------
host trcsess output=test1.trc service=TRACE_INTDEV05.int.lidl.net *.trc
-- 6. Traceanalyzer starten -------------------------------------------------
03.08.2007 Oracle Workshop - Session Tracing 8
4
5. Event 10046
Metalink Note: 21154.1
Event 10046 = diagnostisches Ereignis für SQL_TRACE Aktionen
Levels:
• Level 1 = default - alle Aktivitäten bis Trace Session ist gestoppt
• Äquivalent zu: alter session set sql_trace=true;
• Level 4 = Level 1 + Werte für bind Variables
• Level 8 = Level 1 + Wait Events
• Level 12 = Level 4 + Level 8
Syntax:
alter session set events '10046 trace name context forever, level 12';
oder
Exec dbms_support.start_trace_in_session(sid, serial#, waits, binds);
....
03.08.2007 Oracle Workshop - Session Tracing 9
Trace Analyzer - TRCANLZR
Note: 224270.1
Das Tool für Bereitstellung und Interpretation der Trace-Files
Ablauf:
• Auslesen der SQL Trace-Dateien generiert von EVENT 10046 mit Level 1, 4, 8,
oder 12
• Parsen der Trace-Datei - Auswählen, Verarbeiten, and Speichern der relevanten
Informationen ins Staging Repository
• Erstellug des HTML-Reports lokal ähnlich wie mit TKPROF oder
TRCSUMMARY
03.08.2007 Oracle Workshop - Session Tracing 10
5
6. Trace Analyzer Handhabung
1. Report wird auf dem Server generiert
sqlplus <usr>/<pwd>
exec trca$i.trace_analyzer('<Trace Dateiname>');
2. Report wird lokal beim Entwickler generiert
sqlplus <usr>/<pwd>
Start trcanlzr.sql <Trace Dateiname>;
Beispiel:
start trcanlzr.sql test1.trc
...generating report
Abgelaufen: 00:00:00.09
Trace Analyzer Report "trcanlzr_0_43.html" has been created in
F:ORACLEADMININTDEV05UDUMP
Abgelaufen: 00:00:20.76
Abgelaufen: 00:00:00.37
...copying report
...report "trcanlzr_0_43.html" has been copied into local directory
...exiting now (hit enter key)
03.08.2007 Oracle Workshop - Session Tracing 11
Trace Analyzer Report
03.08.2007 Oracle Workshop - Session Tracing 12
6
7. Trace Analyzer Objekte
TABLES
TRCA$_TRACE, TRCA$_AUDIT_ACTIONS
TRCA$_IDLE_EVENT, TRCA$_CALL_SUMMARY
TRCA$_WAIT, TRCA$_BIND
TRCA$_ERROR, TRCA$_GAP
TRCA$_XCTEND, TRCA$_STAT
TRCA$_CALL, TRCA$_CURSOR
TRCA$_TABLES, TRCA$_CURSOR_TABLES
TRCA$_PLAN_TABLE, TRCA$_EXEC_SUMMARY
TRCA$_WAIT_SUMMARY, TRCA$_STAT_SUMMARY
TRCA$_HOT_BLOCK, TRCA$_CURSOR_WAIT_LATCH
TRCA$_EXTENTS, TRCA$_IND_PARTITIONS
TRCA$_TAB_PARTITIONS, TRCA$_INDEXES
TRCA$_CURSOR_WAIT_SEGMENT
PACKAGES
TRCA$D – Hauptpaket
TRCA$I – Explain plans, segment statistics
VIEW
TRCA$_CURSOR_V
03.08.2007 Oracle Workshop - Session Tracing 13
Installation TRCANLZR
cmd
installTRCA INTDEV05
ABLAUF
-----------------------------------------------------------------------------------------------------------
new 2: DATAFILE 'H:ORACLEORADATAINTDEV05TRCA01.dbf'
Tablespace created.
Specify TRCANLZR password
Enter value for trcanlzr_password: test
Specify Host String including @ prefix (i.e.: @CERBDEV)
Enter value for host_string: @INTDEV05
Below are the list of online tablespaces in this database.
Decide which tablespace you wish to create the Trace Analyzer tables and indexes.
TABLESPACE_NAME CONTENTS
------------------------------ ---------
TEMP TEMPORARY
TRCA PERMANENT
Specify TRCANLZR user's default tablespace
Enter value for default_tablespace: TRCA
Specify TRCANLZR user's temporary tablespace.
Enter value for temporary_tablespace: TEMP
03.08.2007 Oracle Workshop - Session Tracing 14
7