oracle中几种执行计划的获取方法分析

1。预测执行计划-解释计划
解释计划将SQL语句作为输入,获取SQL语句的执行计划,并将执行计划输出存储到计划表中。
首先,在要执行的SQL语句之前添加解释计划,然后生成的执行计划存储在计划表中,如下所示:
解释SQL语句的计划
然后,在计划表中,查询新生成的执行计划,如下所示:
SELECT * FROM表(dbms_xplan。显示);
注意:解释计划只生成执行计划,并不真正执行SQL语句,因此执行计划是不允许的,因为:

1)当生成计划时,当前环境可能与环境不同。
2)不考虑绑定变量的数据类型;
3)无变量窥视。

2。查询缓存执行计划(dbms_xplan。display_cursor)
如果要获得正在执行或刚刚执行的SQL语句的真正执行计划,也就是说,在库缓存中获取执行计划,可以在动态性能视图中进行查询:

1)获取SQL语句的游标
光标光标光标和分的父亲,父亲的sql_id光标(或组合的地址与hash_value场)表示,由child_number字段表示子光标。

如果SQL语句正在运行,它可以从V会话获得其游标信息,例如:
选择状态,sql_id,sql_child_number V $ SESSION状态= 'active'and哪里…

如果您知道SQL语句包含了一些关键字,那么它可以从V - sql视图获取其游标信息,例如:
选择sql_id,child_number sql_text,从V$SQL,sql_text像%关键词

2)在库缓存中获取执行计划
为了在缓存库得到执行计划,我们可以查询动态性能视图V $ sql_plan和V sql_plan_statistics_all美元直接,但更方便的方法是使用sql_id和子指针作为参数。
SELECT * FROM表(dbms_xplan.display_cursor('sql_id ',child_number));

3)获取以前的执行计划:
进行设置了
SELECT * FROM表(dbms_xplan.display_cursor(null,null,'allstats最后));

三.历史查询执行计划(dbms_xplan。display_awr)
AWR会定期保存执行计划的动态性能视图dba_hist_sql_plan观。如果您想查看历史执行计划,可以使用以下方法查询:
SELECT * FROM表(dbms_xplan.display_awr('sql_id);

4。用sqlplus做SQL开发(AUTOTRACE)
设置AUTOTRACE是一个SQLPlus工具功能。它只能用在会话连接SQLPLUS。它非常适合在开发时测试SQL语句的性能。有以下参数可供选择。

设置了---- AUTOTRACE不显示计划和统计信息的实现,这是默认模式
SET AUTOTRACE ON解释---仅显示优化器的执行计划
SET AUTOTRACE ON统计只统计信息
SET AUTOTRACE ON制定实施计划和统计信息显示
设置AUTOTRACE痕迹---没有真正执行,只显示预期的执行计划,计划详细解释

5。生成的跟踪文件(sql_trace查询详细的执行计划,10046)
sql_trace作为初始化参数可以在实例级启用,也可以使只在会议上,在sql_trace实例级启用会导致之后所有的活动过程中,包括所有的用户进程的背景和过程,这往往会导致严重的性能下降,所以一般来说,我们使用的sql_trace方法跟踪当前进程。以下:

SQL >改变会话设置sql_trace =真;
…跟踪SQL语句…
SQL >改变会话设置sql_trace = false;
如果其他进程进行跟踪,可以实现系统包dbms_system。Oracle提供的set_sql_trace_in_session,例如:
SQL> exec dbms_system.set_sql_trace_in_session(SID,串行#,真的)开始跟踪
SQL> exec dbms_system.set_sql_trace_in_session(SID,串行#,false)端的痕迹

在生成的跟踪文件的tkprof工具是用来转换为SQL跟踪生成的跟踪文件的可读格式。语法如下:
tkprof inputfile outputfile
10046事件是sql_trace升级版,这也是一个跟踪会话和跟踪文件,但它的内容更详细。