oracle提供的性能诊断的工具:autotrace、sql_trace、10046事件。
简要记录一下这些工具的使用方法:
autotrace用于跟踪sql的执行计划,收集统计信息。
默认此功能是关闭的,使用下面语句打开:
set autotrace on 包含执行计划和统计信息
set autotrace on explain 只显示执行路径
set autotrace on statistics 只显示执行的统计信息
set autotrace off 关闭autotrace
set autotrace traceonly 同set autotrace on,只是不显示查询的输出
sql_trace
可以在全局启用,也可以在session级启用。
1、全局启用:修改pfile/spfile:sql_trace=true,会影响系统性能,很少使用
2、在当前session级设置:
alter session set sql_trace=true;
alter session set sql_trace=false;
3、跟踪其他用户进程:
通过oracle提供的系统包DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION来完成。
查看包中的过程:
desc DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION
获取要跟踪的进程的sid,serial#,username:
select sid,serial#,username from v$session;
执行:
exec DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(sid,serial#,ture/false)
exec DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(9,2344,ture)
10046事件:
10046是oracle的内部事件,是对sql_trace的增强,可以设置为4个级别:
level1:启用标准的sql_trace功能,等价于sql_trace
level4:等价于level1+绑定值(bind values)
level8:等价于level1+等待事件跟踪
level12:等价于level1+level4+level8
10046也可以在全局设置,也可以在session级设置
1、在全局设置
在参数文件中增加:
event="10046 trace name context forever level 12"
此设置包括所有用户的所有进程生效,包括后台进程
2、对当前session设置
alter session set event '10046 trace name context forever';
alter session set event '10046 trace name context forever,level 8';
alter session set event '10046 trace name context off';
3、对其他session设置
通过DBMS_SYSTEM.SET_EV系统包来实现:
执行跟踪:
exec dbms_system.set_ev(sid,serial#,10046,8,'username');
结束跟踪:
exec dbms_system.set_ev(sid,serial#,10046,0,'username');