方法/步骤
首先先建一个查询的窗口中,选中数据库,点击新建查询。
d出了一个新建查询的窗口的界面中,输入需要执行的sql的语句。
sql输入完成之后,选中需要的执行的sql的语句。
然后进行点击菜单中的查询的按钮选项。
可以d出下拉菜单中,进行选择为显示估计的执行计划。
在执行窗口的界面中查看的执行计划执行的内容了。
如果想正常关闭,那么最好是:先手动断开所有数据库连接(外部链接,比如访问等),关闭监听(防止再次产生外部链接),然后杀掉所有正在执行的数据库进程(数据库内部的一些,比如正在执行的执行计划等,主进程别杀啊),然后关闭外围服务,最后再用immediate关闭数据库。这样能快一些,而且相对而言数据库会正常,不会因为断开外部链接,等待进程结束等问题等待时间超长。,当然也只是快一些而已,如果数据库很大,那么还是会很慢。其他的shutdown abort,也是一个关闭数据库的方法,不过oracle本身也不推荐,因为每次abort后数据库可能会有这样那样的问题。
再baoli一些的,就是直接关机器,关电源了。在发现一个语句的执行计划有异常的时候,通常会生成一个sqlrpt看看使用的执行计划是否正确,如何来判断执行计划是否正确,将通过以下几个步骤来判断:
1先查看sql语句的结构,看语句中连接是union,还是等值连接还是左、右连接,再看连接中的表数量。
2查看执行计划中出现异常的部分。
3查看各表的索引情况及表是否是分区的,在where条件上使用的索引列是否正确,看统计分析表中对表的分析结果是否正确
4分析表的用途,表的数据日增长量。
5分析为什么会出现异常的执行计划。
跟踪执行计划的方法:
(1) set autotrace on explain 只显示查询结果和执行计划
set autotrace on statistic 只显示查询结果统计信息
set autotrace on 显示前两者
set autotrace traceonly 不显示查询结果,只显示执行计划和统计信息
set autotrace off 关闭跟踪
要使用autotrace,必须在sqlplus里面使用,且使用的是sys用户。
(2)可以使用explain plan for select from c_cons 可以解析执行计划,然后通过select from table(dbms_xplaindisplay(null,null,’outline’,null));来显示执行计划。
(3)使用工具Toad for oracle使用sql_id来生成执行计划打开Oracle Database软件后进入软件数据库主界面,在PL/SQL下按F5查看执行计划,在这里面可以看到基数、优化器、耗费等基本信息 如图
2
在SQLPLUS,PL/SQL的命令窗口下执行下面步骤 :
SQL>EXPLAIN PLAN FOR
SELECT FROM SCOTTEMP; --要解析的SQL脚本
SQL>SELECT FROM TABLE(DBMS_XPLANDISPLAY);
如图
完成以上步骤后还需要在SQLPLUS下输入代码执行命令:
SQL>SET TIMING ON --控制显示执行时间统计数据 SQL>SET AUTOTRACE ON EXPLAIN --这样设置包含执行计划、脚本数据输出,没有统计信息
如图
接着我们输入第二段代码:
SQL>执行需要查看执行计划的SQL语句 SQL>SET AUTOTRACE OFF --不生成AUTOTRACE报告,这是缺省模式
然后是第三段
SQL> SET AUTOTRACE ON --这样设置包含执行计划、统计信息、以及脚本数据输出 SQL>执行需要查看执行计划的SQL语句 SQL>SET AUTOTRACE OFF
第四段代码:
SQL> SET AUTOTRACE TRACEONLY--这样设置会有执行计划、统计信息,不会有脚本数据输出
最后输入第5段代码:
SQL>执行需要查看执行计划的SQL语句 SQL>SET AUTOTRACE TRACEONLY STAT --这样设置只包含有统计信息 SQL>执行需要查看执行计划的SQL语句
需要注意的是:在Oracle Database中,PL/SQL Developer 工具并不完全支持所有的SQLPlus命令,如果执行“SET AUTOTRACE ON”命令就会报错,出现接下来的情况:
SQL> SET AUTOTRACE ON;
Cannot SET AUTOTRAC
PL/SQL DEVELOPER工具里面执行上面脚本过后,我们是看不到相关信息的,这时我们可以通过输入脚本代码查询执行过的信息,代码如下:
SELECT TVALUE || '/' || LOWER(RTRIM(IINSTANCE, CHR(0))) || '_ora_' || PSPID || 'trc' TRACE_FILE_NAME FROM ( SELECT PSPID FROM V$MYSTAT M, V$SESSION S, V$PROCESS P WHERE MSTATISTIC# =1 AND SSID = MSID AND PADDR = SPADDR ) P, ( SELECT TINSTANCE FROM V$THREAD T, V$PARAMETER V WHERE VNAME ='thread' AND (VVALUE = 0 OR TTHREAD# = TO_NUMBER(VVALUE)) ) I, (SELECT VALUE FROM V$PARAMETER WHERE NAME='user_dump_dest') T
如图所示:
我们通过Oracle Database,查看执行计划后,通常要以文本的形式保存下来,可以输入命令:tkprof D:\ORACLE\PRODUCT\1020\DB_1\RDBMS\TRACE/wgods_ora_3940trc h:\outtxtoutputfile explain=etl/etl 执行 如图
执行上面命令后,就可以查看生成的文本文件了如图
以上就是如何用Oracle Database,查看执行计划的步骤,需要注意的是PL/SQL Developer 工具并不完全支持所有的SQLPlus命令,执行SET AUTOTRACE ON 就如此,在PL/SQL Developer工具下执行此命令会报错。将所有查询条件涉及的字段建索引,如:receipt_no 、dep_acct_no 等
不要用NOT IN子句,可以使用类似(NO <>'DEP' OR NO<>'OP')的语句
速度应该可以比较快
此外,执行计划的COST大致可以反映查询需要的时间简单一点说就是oracle如何执行sql语句的,比如说你去一个地方,事先会计划好怎么坐车一样,先坐公交到哪儿再坐地铁,oracle的执行计划也是如此,就是一步一步执行sql,比如说先查数据再排序,或者先作子查询再作主查询什么的。oracle的执行计划很复杂的,一般我们看到的执行计划都是oracle通过内部算法计算以后选择的一个消耗比较少的执行路径,就像我们去哪里也要选择一条捷径一样的道理。呵呵…
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)