oracle 10g固定执行计划,oracle 10g执行计划 (转帖)

oracle10g查看SQL执行计划有很多方法:

1.通过PL/SQL打开SQLWINDOW按F5可以看到执行计划,但是这里没有物理读等统计信息

2.使用dbms_xplan包,这里跟F5差不多,也是没有一些统计信息

Oracle9i新引入的包dbms_xplan

Oracle9i新引入的包dbms_xplan。函数display有三个参数:Table_name——执行计划所存放的表,默认为PLAN_TABLE;STATEMENT_ID——PLAN_TABLE表中的字段;FORMAT——显示格式。

SQL> explain plan for

2 select

3 tA.n2,

4 tB.n2

5 from

6 t1 tA,

7 t1 tB

8 where

9 tA.n1 = 15

10 and tB.n1 = tA.n1 11 ;

Explained. SQL> select * from table(dbms_xplan.display);

优点:适合于bind var的SQL。可以直接执行,能够根据相关信息排序,显示界面友好。

3.使用autotrace查看,可以查看一些统计信息

首先执行脚本

SQL>@D:oracleora92rdbmsadminutlxplan.sql 建立plan_table表

SQL> set autotrace on

SQL> set autotrace traceonly

SQL> select table_name from user_tables;

关于Autotrace几个常用选项的说明:

SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式

SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告

SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息

SET AUTOTRACE ON ----------------- 包含执行计划和统计信息

SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出

已选择98行。

已用时间: 00: 00: 00.04

Execution Plan

----------------------------------------------------------

0 SELECT STATEMENT ptimizer=CHOOSE

1 0 NESTED LOOPS

2 1 NESTED LOOPS (OUTER)

3 2 NESTED LOOPS (OUTER)

4 3 NESTED LOOPS (OUTER)

5 4 NESTED LOOPS (OUTER)

6 5 NESTED LOOPS

7 6 TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'

8 7 INDEX (RANGE SCAN) OF 'I_OBJ2' (UNIQUE)

9 6 TABLE ACCESS (CLUSTER) OF 'TAB$'

10 9 INDEX (UNIQUE SCAN) OF 'I_OBJ#' (NON-UNIQUE)

11 5 TABLE ACCESS (BY INDEX ROWID) OF 'OBJ$'

12 11 INDEX (UNIQUE SCAN) OF 'I_OBJ1' (UNIQUE)

13 4 INDEX (UNIQUE SCAN) OF 'I_OBJ1' (UNIQUE)

14 3 TABLE ACCESS (CLUSTER) OF 'USER$'

15 14 INDEX (UNIQUE SCAN) OF 'I_USER#' (NON-UNIQUE)

16 2 TABLE ACCESS (CLUSTER) OF 'SEG$'

17 16 INDEX (UNIQUE SCAN) OF 'I_FILE#_BLOCK#' (NON-UNIQUE)

18 1 TABLE ACCESS (CLUSTER) OF 'TS$'

19 18 INDEX (UNIQUE SCAN) OF 'I_TS#' (NON-UNIQUE)

Statistics

----------------------------------------------------------

0 recursive calls

0 db block gets

1389 consistent gets

0 physical reads

0 redo size

2528 bytes sent via SQL*Net to client

569 bytes received via SQL*Net from client

8 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

98 rows processed

SQL>

4.使用sql_trace查看,这个跟3差不多

在pl/sql或者sqlplus中,打开一个sql_window。

(1)先运行:alter session set sql_trace=true;

(2)再运行你那个返回结果不正确的SQL

(3)再运行:alter session set sql_trace=false;

(4)

马上登陆到机器上,到$ORACLE_BASE/admin/sid/udump目录下。找到刚生成的.trc文件(假设文件名是

1234455.trc)。执行命令:tkprof 1234455.trc

aa.txt。查看aa.txt文件。这个文件里面有执行计划。看看执行计划每一步返回的结果集记录数是不是正确。

5.通过10053事件来查看,这里面可以查到一些关于SQL成本的详细信息

在pl/sql或者sqlplus中,打开一个sql_window。

(1)先运行:Alter session set events’10053 trace name context forever[,level {1/2}]’;

(2)再运行你那个返回结果不正确的SQL

(3)再运行:Alter session set events’10053 trace name context off’;

(4)马上登陆到10.1.4.10机器上,到$ORACLE_BASE/admin/sid/udump目录下。找到刚生成的.trc文件)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值