[Oracle] 获取执行计划的几种方法
来源:互联网 发布:mac运行iphone应用 编辑:程序博客网 时间:2024/05/17 15:20
1. 预估执行计划 - Explain Plan
首先,在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划表中,语句如下:
explain plan for SQL语句
然后,在计划表中查询刚刚生成的执行计划,语句如下:
select * from table(dbms_xplan.display);
注意:Explain plan只生成执行计划,并不会真正执行SQL语句,因此产生的执行计划有可能不准,因为:
1)当前的环境可能和执行计划生成时的环境不同;
2)不会考虑绑定变量的数据类型;
3)不进行变量窥视。
2. 查询内存中缓存的执行计划 (dbms_xplan.display_cursor)
如果你想获取正在执行的或刚执行结束的SQL语句真实的执行计划(即获取library cache中的执行计划),可以到动态性能视图里查询。方法如下:
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等,但更方便的方法是以sql_id和子游标为参数,执行如下语句:
select * from table(dbms_xplan.display_cursor('sql_id',child_number));
3)获取前一次的执行计划:
set serveroutput off
select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));
3. 查询历史执行计划(dbms_xplan.display_awr)
select * from table(dbms_xplan.display_awr('sql_id');
4. 在用sqlplus做SQL开发时(Autotrace)
SET AUTOTRACE OFF ---------------- 不显示执行计划和统计信息,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ 只显示优化器执行计划
SET AUTOTRACE ON STATISTICS -- 只显示统计信息
SET AUTOTRACE ON ----------------- 执行计划和统计信息同时显示
SET AUTOTRACE TRACEONLY ------ 不真正执行,只显示预期的执行计划,同explain plan
5. 生成Trace文件查询详细的执行计划 (SQL_Trace, 10046)
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) --结束跟踪
生成trace文件后,再用tkprof 工具将sql trace 生成的跟踪文件转换成易读的格式,语法如下:
tkprof inputfile outputfile
10046事件是SQL_TRACE的一个升级版,它也是追踪会话,生成Trace文件,只是它里面的内容更详细,
- [Oracle] 获取执行计划的几种方法
- 获取执行计划的几种方法
- oracle 执行计划获取的几种方式
- 获取SQL执行计划的常见几种方法
- 查看Oracle执行计划的几种方法
- 查看Oracle执行计划的几种方法
- 查看Oracle执行计划的几种方法
- 查看Oracle执行计划的几种方法
- 查看Oracle执行计划的几种方法
- 查看Oracle执行计划的几种方法
- 查看Oracle执行计划的几种方法
- 查看Oracle执行计划的几种方法
- 查看Oracle执行计划的几种方法
- 查看Oracle执行计划的几种方法
- 查看Oracle执行计划的几种方法
- Oracle获取执行计划的方法
- oracle获取执行计划的方法
- Oracle获取执行计划的五种方法
- Ubuntu12.04下pulseaudio的安装以及API使用
- C++11之Lambda表达式
- Statspack 报告的分析经验
- yaw-pitch-roll
- 性能调优攻略
- [Oracle] 获取执行计划的几种方法
- jsp:forward动作标签无法访问Struts2的Action的解决方案
- “bit_vector”: 未声明的标识符 VS2010解决方案
- 了解数据库最基本的三个范式(normal form)
- 让你的MyEclipse像Visual Studio 2008一样拥有强大功能智能感知功能
- latex调整item距离,数学环境中使用粗斜体
- 回文词(401 - Palindromes)
- 11 种 CSS 代码优化和格式化的工具[转]
- 配置Erlang shell的工作路径