oracle优化6(使用sql_trace/10046事件进行数据库诊断)

对该会话进行跟踪,产生trace文件,然后对该文件用tkprof程序格式化一下

使用SQL Trace            

Alter session set sql_trace=true;           //启用跟踪

生成的跟踪文件路径:@oracle_home\ diag\rdbms\orcl\orcl\trace(版本:11g

Alter session set sql_trace=false;          //禁用跟踪

 

使用sql_trace,常用初始化参数设置

Timed_statistics=true;

不设置的话,一些重要信息不会被收集到

Max_dump_file_size( alter session set Max_dump_file_size=unlimited; )

设置跟踪文件的大小

Tkprof按照格出输出

得到执行计划的方式很有用,因为它包含其它额外信息,如SQL语句执行的每个阶段(ParseExecuteFetch)分别耗费的各个资源情况(CPUDISKelapsed)

Tkprof 跟踪文件.trc 输出文件.txt

 

 

跟踪其他用户进程

Dbms_system.set_sql_trace_in_session

说明:三个参数,sid/serial#/sql_trace

得到当前系统的会话:

Select sid,serial#,username from v$session where username is not null;

       SID    SERIAL# USERNAME

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

       134         34 USER_EB

       192        344 USER_EB

       199       6280 USER_EB

 

设置跟踪,用户角色要为sys

Exec Dbms_system.set_sql_trace_in_session(134,34,true);

停止跟踪:

Exec Dbms_system.set_sql_trace_in_session(134,34,false);

 

 

10046事件说明

10046事件是oracle提供的内部事件,是对sql_trace的增强,可以设置以下4个级别:

Level 1:启用标准的sql_trace功能,等价于sql_trace

Level 4:等价于Level 1+绑定值

Level 8: 等价于Level 4+等待事件跟踪

Level 12: 等价于Level 1+level 4 + level 8

 

当前session设置

当前session设置

Alter session set events '10046 trace name context forever';

或者:

Alter session set events ‘10046 trace name context forever,level 8’;

禁用:

Alter session set events ‘10046 trace name context off;

 

对其他用户session设置

Dbms_system.set_ev

说明:5个参数 sid/serial#/ev/level/username

Select sid,serial#,username from v$session where username is not null;

       SID    SERIAL# USERNAME

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

       70         127 USER_EB

       192        344 USER_EB

       199       6280 USER_EB

 

执行跟踪:

Exec Dbms_system.set_ev(70,127,10046,8,'user_eb');

结束跟踪:

Exec Dbms_system.set_ev(70,127,10046,0,'user_eb');

posted @ 2011-04-03 15:26  liuqun  阅读(515)  评论(0编辑  收藏  举报