[20150810]10g下dbms_xplan.display_cursor

[20150810]10g下dbms_xplan.display_cursor.txt

--执行过的sql语句要查看执行计划要使用dbms_xplan包,我一般写成脚本反复使用,这样快捷方便一些。

--我的定义如下:

$  cat dpc.sql
set verify off
select * from table(dbms_xplan.display_cursor(NVL('&1',NULL),NULL,'ALL ALLSTATS LAST PEEKED_BINDS cost partition -projection -outline &2'));
prompt
prompt argment : typical all advanced partition predicate remote note parallel projection alias peeked_binds outline adaptive
prompt

--但是在10g下遇到一点小问题,今天花一点实际解决它:

SCOTT@test> select * from dept where deptno=10;
      DEPTNO DNAME          LOC
------------ -------------- -------------
          10 ACCOUNTING     NEW YORK

SCOTT@test> @dpc '' ''
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  4xamnunv51w9j, child number 0
-------------------------------------
select * from dept where deptno=10
Plan hash value: 2852011669
----------------------------------------------------------------------------------------
| Id  | Operation                   | Name    | E-Rows |E-Bytes| Cost (%CPU)| E-Time   |
----------------------------------------------------------------------------------------
|   1 |  TABLE ACCESS BY INDEX ROWID| DEPT    |      1 |    20 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | PK_DEPT |      1 |       |     0   (0)|          |
----------------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1 / DEPT@SEL$1
   2 - SEL$1 / DEPT@SEL$1
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("DEPTNO"=10)

--如果仔细看缺少1行,id=0, SELECT STATEMENT.

SCOTT@test> select * from table(dbms_xplan.display_cursor(NULL,NULL));
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  4xamnunv51w9j, child number 0
-------------------------------------
select * from dept where deptno=10
Plan hash value: 2852011669
---------------------------------------------------------------------------------------
| Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |         |       |       |     1 (100)|          |
|   1 |  TABLE ACCESS BY INDEX ROWID| DEPT    |     1 |    20 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | PK_DEPT |     1 |       |     0   (0)|          |
---------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("DEPTNO"=10)

--很明显是我后面的参数导致的问题,自己手工测试发现:
SCOTT@test> select * from table(dbms_xplan.display_cursor('4xamnunv51w9j',NULL,'ALLSTATS'));
PLAN_TABLE_OUTPUT
-------------------------------------
SQL_ID  4xamnunv51w9j, child number 0
-------------------------------------
select * from dept where deptno=10
Plan hash value: 2852011669
--------------------------------------------------------
| Id  | Operation                   | Name    | E-Rows |
--------------------------------------------------------
|   1 |  TABLE ACCESS BY INDEX ROWID| DEPT    |      1 |
|*  2 |   INDEX UNIQUE SCAN         | PK_DEPT |      1 |
--------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("DEPTNO"=10)

--看来脚本要取消ALLSTATS参数。但是在11g,这样执行是正常的,估计是10g的一个小bug。

Table 8-1. Format levels and fine-grained control in calls to DBMS_XPLAN packages

                       Format levels
Fine-grained
Control       Column/Section Basic Serial Typical All Advanced
==============================================================================
rows          C                    X      X       X   X
bytes         C                    X      X       X   X
cost          C                    X      X       X   X
partition     C                    X      X       X   X
predicate     S                    X      X       X   X
remote        S                    X      X       X   X
note          S                    X      X       X   X
parallel      C                           X       X   X
projection    S                                   X   X
alias         S                                   X   X
peeked_binds  S                                       X
outline       S                                       X
adaptive      See discussion of adaptive execution plans below
==============================================================================

时间: 2024-07-30 10:59:08

[20150810]10g下dbms_xplan.display_cursor的相关文章

通过dbms_xplan.display_cursor识别低效的执行计划

dbms_xplan.display_cursor定义: function display_cursor(sql_id           varchar2 default  null,                                      cursor_child_no  integer  default  0,                                      format          varchar2 default  'TYPICAL')

[20151021]理解dbms_xplan.display_cursor的format参数all.txt

[20151021]理解dbms_xplan.display_cursor的format参数all.txt --今天才理解dbms_xplan.display_cursor的format参数all,看来看书与看文档不够仔细. --我一般看执行计划使用我自己的脚本: $ cat dpcz.sql set verify off --select * from table(dbms_xplan.display_cursor(NVL('&1',NULL),NULL,'ALLSTATS LAST PEEK

[20120712]10g下Oracle Index rebuild online.txt

[20120712]10g下Oracle Index rebuild online.txt oracle rebuild online时要建立一张IOT表,为了保证事务依旧能操作,需要记录索引rebuild期间的DML操作.但是10g与11g下rebuild的机制有一些不同. index online rebuild 前先建立一张IOT表跟踪后续DML操作,然后merge全部的改变到索引中. 下面通过例子来说明: BANNER ----------------------------------

10g下修改VIP地址

1. 停止全部服务 crs_stop -all 2.root用户登陆,要根据原来的环境需要执行命令,设置环境变量(注意如果你不是root执行,要报错PRKO-2117 : This command should be executed as the system privilege user.): export ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=$ORACLE_BASE/product/10.2.0/rac_dbexport ORA_CR

dbms_xplan之display_cursor函数的使用

        DBMS_XPLAN包中display_cursor函数不同于display函数,display_cursor用于显示SQL语句的真实的执行计划,在大多数情况下,显示真实 的执行计划有助于更好的分析SQL语句的全过程,尤其是运行此SQL语句实时的I/O开销.通过对比预估的I/O与真实的I/O开销来判断SQL语句所存 在问题,如缺少统计信息,SQL语句执行的次数,根据实际中间结果集的大小来选择合适的连接方式等.本文仅仅讲述display_cursor函数的使 用.         

Oracle执行计划filter下多个节点的优化

Oracle执行计划filter下多个节点的优化 FILTER操作是执行计划中常见的操作,这种操作有两种情况:   l 只有一个子节点,那么就是简单过滤操作. l 有多个子节点,那么就是类似NESTED LOOPS操作,只不过与NESTED LOOPS差别在于,FILTER内部会构建HASH表,对于重复匹配的,不会再次进行循环查找,而是利用已有结果,提高效率.但是一旦重复匹配的较少,循环次数多,那么,FILTER操作将是严重影响性能的操作,可能你的SQL几天都执行不完了. 真题1.执行计划里的a

Oracle 10g(10.1.0.2)中的OPTIMIZER

oracle Oracle 10g(10.1.0.2)中的OPTIMIZER_INDEX_COST_ADJ Tom Kyte的新书Effective Oracle by Design的第6章 Getting the Most Out of the Cost-Based Optimizer中介绍了参数OPTIMIZER_INDEX_COST_ADJ,并认为可以理解为Oracle执行多块(MultiBlock)I/O(比如全表扫描)的代价与执行单块(Single-block)I/O代价的相对比例.T

Suse 11下多路径及udev配置

    最近给客户基于SuSe 11 SP3下多路径部署Oracle 10g RAC.SuSe 11下用10g,也算一朵奇葩,连篇文档都比较难找,谁叫Oracle太贵呢.下面主要是描述了在该环境下如何去配置多路径.由于10g下的ocr与votingdisk不能直接存放到asm磁盘,所以依旧要使用raw设备方式来保存.下文供大家参考.   一.查看当前scsi设备及获取设备wwid#使用 cat /proc/partitions或者/sbin/sfdisk命令查看当前系统中的scsi设备suse1

Linux平台下卸载ORACLE

实验环境:操作系统版本:Red Hat Enterprise Linux Server release 5.5 (Tikanga), 数据库版本 :Oracle Database 10g Enterprise Edition Release 10.2.0.1.0.卸载ORACLE 10g的过程,在不同平台或不同版本数据可能有些步骤略有不同,具体操作的时候请结合实际情况酌情处理. 1. 首先做好备份工作(如果有需要的话,如果你想重新完全安装,可以忽略这个步骤).用 oracle 用户登录. 最好先