Oracle execute plan原理及实例

oracle执行计划对我们并不陌生,往往我们在工作中只会在发生性能瓶颈时看一下,没有想过执行计划是如何生成的。下面用实例来模拟数据访问方式和数据处理方式的演变。

1.执行计划—通过表访问数据  TABLE ACCESS FULL

LEO1@LEO1> create table leo1 as select * from dba_objects;      我们创建一张表leo1

Table created.

LEO1@LEO1> select count(*) from leo1;      这张表有71955条记录

COUNT(*)

----------

71955

LEO1@LEO1> set autotrace trace exp;         启动执行计划

LEO1@LEO1> select * from leo1;

Execution Plan

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

Plan hash value: 2716644435

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

| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |

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

|   0 | SELECT STATEMENT  |      | 83162 |    16M|   287   (1)| 00:00:04 |

|   1 |  TABLE ACCESS FULL| LEO1 | 83162 |    16M|   287   (1)| 00:00:04 |

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

Note

-----

- dynamic sampling used for this statement (level=2)

数据访问方式:走的是全表扫描,因为没有创建索引,所以没办法走索引,这是一种效率不高的数据访问方式,在实际应用中较少。

2.执行计划—通过表并行访问数据  PARALLEL

LEO1@LEO1> select /*+ parallel */ count(*) from leo1;     自动评估并行度

Execution Plan

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

Plan hash value: 452265093

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

| Id  | Operation              | Name     | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |

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

|   0 | SELECT STATEMENT    |          |     1 |   159   (0)| 00:00:02 |        |      |            |

|   1 |  SORT AGGREGATE    |          |     1 |            |          |        |      |            |

|   2 |   PX COORDINATOR   |          |       |            |          |        |      |            |

|   3 |   PX SEND QC (RANDOM)| :TQ10000 |     1 |        |       |  Q1,00 | P->S | QC (RAND)  |

|   4 |     SORT AGGREGATE  |          |     1 |            |          |  Q1,00 | PCWP |            |

|   5 |      PX BLOCK ITERATOR|          | 71955 |   159   (0)| 00:00:02 |  Q1,00 | PCWC |            |

|   6 |       TABLE ACCESS FULL| LEO1     | 71955 |   159   (0)| 00:00:02 |  Q1,00 | PCWP |            |

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

Note

-----

- automatic DOP: Computed Degree of Parallelism is 2  

如果不指定并行度,优化器自动评估并行度为2,因为我的小本本就是双核的,并行度最大只能是2

LEO1@LEO1> select /*+ parallel(leo1 4) */ count(*) from leo1;      指定4个并行度

Execution Plan

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

Plan hash value: 452265093

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

| Id  | Operation              | Name     | Rows  | Cost (%CPU)| Time     |    TQ  |IN-OUT| PQ Distrib |

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

|   0 | SELECT STATEMENT     |          |     1 |    80   (2)| 00:00:01 |        |      |            |

|   1 |  SORT AGGREGATE     |          |     1 |            |          |        |      |            |

时间: 2024-09-13 05:42:15

Oracle execute plan原理及实例的相关文章

Oracle恢复内部原理:实例恢复

实例恢复用于恢复崩溃失败或者并行服务器环境中的实例失败,所以实例恢复既可以指崩溃恢复也可以指并行服务器环境中的实例恢复(只要有一个存活的实例就可以恢复其他一个或多个失败的实例). 实例恢复的目标就是还原失败实例在数据缓冲区中的数据块并关闭还开着的线程.实例恢复只用联机归档日志和当前联机数据文件(不需要还原历史备份).实例恢复一次只能恢复一个线程,它从该线程最近的线程检查点开始恢复直至线程的结束. 5.1  检测是否需要实例恢复 当Oracle内核发现一个实例死掉而对应线程在控制文件中的线程打开状

RHEL 4.7下的Oracle 10g RAC到单实例的单向同步

GG同步参考: GoldenGate配置实例:RHEL 4.7下的Oracle 10g RAC到单实例的单向同步(一) http://blog.csdn.net/wildwave/article/details/7053768 GoldenGate配置实例:RHEL 4.7下的Oracle 10g RAC到单实例的单向同步(二) http://blog.csdn.net/wildwave/article/details/7056362 GoldenGate配置实例:RHEL 4.7下的Oracl

Oracle RAC 连接到指定实例

        在某些特定的情形下,有时候需要从客户端连接到RAC中指定的实例,而不是由客户端Load_balance来动态选择或者是通过服务器端的监听器根据负载情形来转发.对此我们可以通过为tnsnames.ora中特定的网络服务名添加instance_name子项,或者是单独建立一个指向所需实例的网络服务名,下面描述这两种情形.   一.测试环境 -->Oracle 版本 SQL> select * from v$version where rownum<2; BANNER ----

Oracle 11g RAC 环境下单实例非缺省监听及端口配置

      如果在Oracle 11g RAC环境下使用dbca创建单实例数据库后,Oracle会自动将其注册到缺省的1521端口及监听器.大多数情况下我们使用的为非缺省监听器以及非缺省的监听端口.而且在Oracle 11g RAC环境中,对于集群监听器的配置由grid用户来接管了.基于这种情形的单实例非缺省监听及端口该如何配置呢?本文给出了解决方案,并且使用了静态及动态两种注册方法.              关于单实例下非缺省监听及端口的配置可以参考下面的文章.实际上参照下列文章依旧可以完成

db2-关于Oracle 和 DB2 用户 库 实例间的关系

问题描述 关于Oracle 和 DB2 用户 库 实例间的关系 oracle一个实例一个库,一个库可以包含多个用户. db2一个实例多个库,多个库共用一个用户. 是不是这样的.一直没搞明白??求解答!! 解决方案 http://wenku.baidu.com/link?url=_d6J5I6Lnw6Lv4pGuFd8vjj8Ht1KV1vPxii0zDTeP2CE6JQ9plQdp7CsOwhNCYR15iG_UPv2Jhefi2Dpa9ligIKzfp5H2g5IZHmigU9UOOy

oracle 字符长度函数及实例教程

oracle 字符长度函数及实例教程 -- Oracle 里面使用 lengthb SQL> select lengthb('123456') from dual; LENGTHB('123456') -----------------                 6 SQL> select lengthb('123456天津') from dual; LENGTHB('123456天津') ---------------------   mysql教程> select char_l

ORACLE RAC工作原理

在一个应用环境当中,所有的服务器使用和管理同一个数据库,目的是为了分散每一台服务器的工 作量,硬件上至少需要两台以上的服务器,而且还需要一个共享存储设备.同时还需要两类软件,一 个是集群软件,另外一个就是Oracle数据库中的RAC组件.同时所有服务器上的OS都应该是同一类OS, 根据负载均衡的配置策略,当一个客户端发送请求到某一台服务的listener后,这台服务器根据我们 的负载均衡策略,会把请求发送给本机的RAC组件处理也可能会发送给另外一台服务器的RAC组件处理 ,处理完请求后,RAC会

oracle数据库如何创建触发器实例

Oracle   DBA   Studio   工具里面就能创建触发器 CREATE   TRIGGER     名称     CREATE   TRIGGER   -   创建一个新触发器           语法     CREATE   TRIGGER   name   {   BEFORE   |   AFTER   }   {   event   [OR   ...]   }             ON   table   FOR   EACH   {   ROW   |   STA

Oracle架构实现原理、含五大进程解析(图文详解)

目录 目录 前言 Oracle RDBMS架构图 内存结构 系统全局区SGA 高速缓存缓冲区数据库缓冲区 日志缓冲区 共享池 其他结构 进程结构 用户连接进程 用户进程User Process Server Process服务进程 程序全局区PGA Oracle的connect连接和session会话与User Process紧密相关 后台进程 数据库写入进程DBWn 检查点CKPT 进程监视进程PMON 系统监视进程SMON 重做日志文件和日志写入进程 归档进程ARCn 存储结构 物理结构 D