Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198160
  • 博文数量: 61
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 1017
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-19 18:42
文章分类

全部博文(61)

文章存档

2009年(1)

2008年(60)

我的朋友

分类: Oracle

2008-05-20 20:28:12

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');

阅读(1215) | 评论(0) | 转发(0) |
0

上一篇:你哭了吗

下一篇:恶补中

给主人留下些什么吧!~~