
1 预估执行计划 - Explain Plan
Explain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中。
首先,在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划表中,语句如下:
explain plan for SQL语句
然后,在计划表中查询刚刚生成的执行计划,语句如下:
select from table(dbms_xplandisplay);
注意:Explain plan只生成执行计划,并不会真正执行SQL语句,因此产生的执行计划有可能不准,因为:
1)当前的环境可能和执行计划生成时的环境不同;
2)不会考虑绑定变量的数据类型;
3)不进行变量窥视。
2 查询内存中缓存的执行计划 (dbms_xplandisplay_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_xplandisplay_cursor('sql_id',child_number));
3)获取前一次的执行计划:
set serveroutput off
select from table(dbms_xplandisplay_cursor(null,null,'ALLSTATS LAST'));
3 查询历史执行计划(dbms_xplandisplay_awr)
AWR会定时把动态性能视图中的执行计划保存到dba_hist_sql_plan视图中,如果你想要查看历史执行计划,可以采用如下方法查询:
select from table(dbms_xplandisplay_awr('sql_id');
4 在用sqlplus做SQL开发是(Autotrace)
set autotrace是sqlplus工具的一个功能,只能在通过sqlplus连接的session中使用,它非常适合在开发时测试SQL语句的性能,有以下几种参数可供选择:
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_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_systemset_sql_trace_in_session(sid,serial#,true) --开始跟踪
SQL> exec dbms_systemset_sql_trace_in_session(sid,serial#,false) --结束跟踪
生成trace文件后,再用tkprof 工具将sql trace 生成的跟踪文件转换成易读的格式,语法如下:
tkprof inputfile outputfile
10046事件是SQL_TRACE的一个升级版,它也是追踪会话,生成Trace文件,只是它里面的内容更详细,
需要添加注释但不包括开发历史。
为了题号易读性,源程序应该添加注释。
为什么添加注释,解释如下:
1永远不要过于相信自己的理解力,当思路通常,进入编程境界时,可以很流畅地实现某个功能,但这种流畅可能是因为当时正处于这种开发思路中。
2可读性第一,效率第二,在那些“古老”的岁月里,编程是少数人的专利,随心所欲地写程序,以追逐程序执行效率为目的。
3代码即文档,程序源代码是程序文档的重要组成部分,在想着把各种软件相关文档写规范的同时,不要忘了把软件里最重要的文档,源代码写规范。
添加注释是为了之后使用的时候一目了然,可以添加注释但不包括开发历史,添加上开发历史会显得整个代码十分繁琐和笨拙。
先判断3个数中的前两个数;把较小的数保存到min中;
再用前两个数中的较小的数min与第三个数c进行比较;
如果c<min则把c保存到min中,如果c>min说明min是三个数中最小的;
打印输出最小的数min,程序结束;
扩展判断3个数中最大max和最小min,并输出:
以上就是关于获取SQL执行计划的常见几种方法全部的内容,包括:获取SQL执行计划的常见几种方法、为了提高易读性,源程序应该添加的注释包括开发历史吗、画出求三个数中的最小数的N-S图,然后用C语言写出程序.(代码要求易读性强).等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)