Oracle获取执行计划方法分析

Oracle获取执行计划方法分析

上一篇 / 下一篇  2012-01-16 16:29:32 / 个人分类:Oracle数据库管理

1. Explain plan
Explain plan以 SQL语句作为输入,得到这条SQL语句的 执行计划,并将执行计划输出存储到计划表中,方法如下:
explain plan for select * from t;
select * from table(dbms_xplan.display);
注意:Explain plan只生成执行计划,并不会真正执行SQL语句,因此产生的执行计划有可能不准。
2. 查询动态性能视图
如果你想获取正在执行的或刚执行结束的SQL语句真实的执行计划(即获取库缓存中的执行计划),可以到动态性能视图里查询。方法如下:
1)获取SQL语句的游标
游标分为父游标和子游标,父游标由sql_id(或联合address和hash_value)字段表示,子游标由child_number字段表示。
如果SQL语句正在运行,可以从v$session中获得它的游标信息,如:
select status, sql_id, sql_child_number from v$session where status='ACTIVE' and ....
如果知道SQL语句包含某些关键字,可以从v$sql视图中获得它的游标信息,如:
select sql_id, child_number, sql_text from v$sql where sql_text like '% 关键字%‘
2)获取库缓存中的执行计划
为了获取缓存库中的执行计划,可以直接查询动态性能视图v$sql_plan和v$sql_plan_statistics_all等,但更方便的方法是:
select * from table(dbmx_xplan.display_curser(' sql_id ', child_number ));
3. AWR报告
AWR报告把动态性能视图中的执行计划保存到dba_hist_sql_plan视图中,我们可以采用如下方法查询AWR中的执行计划:
select * from table(dbmx_xplan.display_awr(' sql_id ' );
4. Autotrace
set autotrace是sqlplus工具的一个功能,只能在通过sqlplus连接的session中使用,它非常适合在开发时测试SQL语句的性能,有以下几种参数可供选择:
SET AUTOTRACE OFF ---------------- 不显示执行计划和统计信息,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ 只显示优化器执行计划
SET AUTOTRACE ON STATISTICS -- 只显示统计信息
SET AUTOTRACE ON ----------------- 执行计划和统计信息同时显示
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出
5. SQL_TRACE
SQL_TRACE作为初始化参数可以在实例级别启用,也可以只在会话级别启用,在实例级别启用SQL_TRACE会导致所有进程的活动被跟踪,包括后台进程及所有用户进程,这通常会导致比较严重的性能问题,所以在一般情况下,我们使用sql_trace跟踪当前进程,方法如下:
SQL> alter session set sql_trace=true;
...被跟踪的SQL语句...
SQL> alter session set sql_trace=false;
如果要跟踪其它进程,可以通过Oracle提供的系统包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION来实现,例如:
SQL> exec dbms_system.set_sql_trace_in_session( sid, serial#,true) --开始跟踪
SQL> exec dbms_system.set_sql_trace_in_session( sid, serial#,false) --结束跟踪
使用tkprof 工具将sql trace 生成的跟踪文件转换成易读的格式,用发如下:
tkprof inputfile outputfile

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/330796/viewspace-715011/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/330796/viewspace-715011/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值