您的位置:首页 > 数据库 > Oracle

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

2011-04-03 15:26 561 查看
对该会话进行跟踪,产生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语句执行的每个阶段(如Parse、Execute、Fetch)分别耗费的各个资源情况(如CPU、DISK、elapsed等)

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');
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: