篇一 :Oracle如何分析执行计划

执行计划:

首先在分析的用户下执行rdbms\admin\utlxplan.sql

用sys用户登录:sqlplus\admin\plustrace.sql

grant sqlplus to user_name;

1. 找出耗费资源比较多的语句

SELECT ADDRESS,

substr(SQL_TEXT,1,20) Text,

buffer_gets,

executions,

buffer_gets/executions AVG

FROM v$sqlarea

WHERE executions>0

AND buffer_gets > 100000

ORDER BY 5;

2. 如何分析执行计划:

SQL> SELECT * FROM LARGE_TABLE where USERNAME = ‘TEST’;

Query Plan

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

SELECT STATEMENT Optimizer=CHOOSE (Cost=1234 Card=1 Bytes=14)

TABLE ACCESS FULL LARGE_TABLE [:Q65001] [ANALYZED]

TABLE ACCESS FULL large_table:在large_table上做全表扫描

[:Q65001] 表明该部分查询是以并行方式运行的。

[ANALYZED] 表明操作中引用的对象被分析过了,在数据字典中有该对象的统计信息可以供CBO使用。

3. 各个表之间是如何关联的

在执行计划中,需要知道哪个操作是先执行的,哪个操作是后执行的,这对于判断哪个表为驱动表有用处。判断之前,如果对表的访问是通过rowid,且该rowid的值是从索引扫描中得来得,则将该索引扫描先从执行计划中暂时去掉。然后在执行计划剩下的部分中,判断执行顺序的指导原则就是:最右、最上的操作先执行。

…… …… 余下全文

篇二 :半小时看懂Oracle的执行计划

一、什么是执行计划

An explain plan is a representation of the access path that is taken when a query is executed within Oracle.

二、如何访问数据

At the physical level Oracle reads blocks of data. The smallest amount of data read is a single Oracle block, the largest is constrained by operating system limits (and multiblock i/o). Logically Oracle finds the data to read by using the following methods:

Full Table Scan (FTS) --全表扫描

--索引扫描(唯一和非唯一)

--物理行id Index Lookup (unique & non-unique) Rowid

三、执行计划层次关系

When looking at a plan, the rightmost (ie most inndented) uppermost operation is the first thing that is executed. --采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID就最先执行 1、看一个简单的例子:

Query Plan

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

SELECT STATEMENT [CHOOSE] Cost=1234

**TABLE ACCESS FULL LARGE [:Q65001] [ANALYZED]--[:Q65001]表示是并行方式,[ANALYZED]表示 该对象已经分析过了

…… …… 余下全文

篇三 :Oracle执行计划详解

Oracle执行计划详解

目录

---

一.相关的概念

Rowid的概念

Recursive Sql概念

Predicate(谓词)

DRiving Table(驱动表)

Probed Table(被探查表)

组合索引(concatenated index)

可选择性(selectivity)

二.oracle访问数据的存取方法

1) 全表扫描(Full Table Scans, FTS)

2) 通过ROWID的表存取(Table Access by ROWID或rowid lookup)

3)索引扫描(Index Scan或index lookup)有4种类型的索引扫描:

(1) 索引唯一扫描(index unique scan)

(2) 索引范围扫描(index range scan)

在非唯一索引上都使用索引范围扫描。使用index rang scan的3种情况: (a) 在唯一索引列上使用了range操作符(> < <> >= <= between) (b) 在组合索引上,只使用部分列进行查询,导致查询出多行 (c) 对非唯一索引列上进行的任何查询。

(3) 索引全扫描(index full scan)

(4) 索引快速扫描(index fast full scan)

三、表之间的连接

1,排序 - - 合并连接(Sort Merge Join, SMJ)

2,嵌套循环(Nested Loops, NL)

3,哈希连接(Hash Join, HJ)

另外,笛卡儿乘积(Cartesian Product)

总结Oracle连接方法

Oracle执行计划总结概述

+++

一.相关的概念

Rowid的概念:rowid是一个伪列,既然是伪列,那么这个列就不是用户定义,而是系统自己给加上的。 对每个表都有一个rowid的伪列,但是表中并不物理存储ROWID列的值。不过你可以像使用其它列那样使用它,但是不能删除改列,也不能对该列的值进行 修改、插入。一旦一行数据插入数据库,则rowid在该行的生命周期内是唯一的,即即使该行产生行迁移,行的rowid也不会改变。

…… …… 余下全文

篇四 :oracle执行计划解释

oracle执行计划解释

一.相关概念

1·rowid,伪列:就是系统自己给加上的,每个表都有一个伪列,并不是物理存在。它不能被修改,删除,和添加,rowid在该行的生命周期是唯一的,如果向数据库插入一列,只会引起行的变化,但是rowid并不会变。

2·recursive sql概念:当用户执行一些SQL语句时,会自动执行一些额外的语句,我们把这些额外的SQL语句称为“recursive calls” 或者是“recursive sql statement”,当在执行一个DDL语句时,Oracle总会隐含的发出一些Recursiv sql语句,用于修改数据字典,如果数据字典没有在共享内存中,则就执行“resursive calls”,它会把数据字典从物理读取到共享内存。当然DML和select语句都可能引起recursive SQL。

3·row source 行源:在查询中,由上一操作返回的符合条件的数据集,它可能是整个表,也可能是部分,当然也可以对2个表进行连接操作(join)最后得到的数据集 4·predicate:一个查询中的where限制条件

5·driving table 驱动表:该表又成为外层表,这个感念用于内嵌和HASH连接中,如果返回数据较大,会有负面影响, 返回行数据较小的适合做驱动表

6·probed table 被探查表:该表又称为内层表,我们在外层表中取得一条数据,在该表中寻找符合连接的条件的行。

7·组合索引(concatenated index)由多个列组成的索引,在组合索引中有一个重要的概念,就是引导索引,

create index idx_tab on tab(col1,col2,col3),

indx_tab则称为组合索引,

col1则称为引导列

在查询条件where后,必须使用引导索引,才会使用该组合索引

…… …… 余下全文

篇五 :怎样看懂Oracle的执行计划

一、什么是执行计划

An explain plan is a representation of the access path that is taken when a query is executed within Oracle. 二、如何访问数据

At the physical level Oracle reads blocks of data. The smallest amount of data read is a single Oracle block, the largest is constrained by operating system limits (and multiblock i/o). Logically Oracle finds the data to read by using the following methods:

Full Table Scan (FTS) --全表扫描

Index Lookup (unique & non-unique) --索引扫描(唯一和非唯一)

Rowid --物理行id 三、执行计划层次关系

When looking at a plan, the rightmost (ie most inndented) uppermost operation is the first thing that is executed. --采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID就最先执行 1、看一个简单的例子:

Query Plan

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

SELECT STATEMENT [CHOOSE] Cost=1234

**TABLE ACCESS FULL LARGE [:Q65001] [ANALYZED]--[:Q65001]表示是并行方式,

…… …… 余下全文

篇六 :oracle执行计划

oracle执行计划

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

| 0 | SELECT STATEMENT | | 8 | 64 | 2 (0)| 00:00:01 |

| 1 | TABLE ACCESS FULL| DAVE | 8 | 64 | 2 (0)| 00:00:01 |

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

统计信息

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

0 recursive calls

0 db block gets

4 consistent gets

0 physical reads

0 redo size

609 bytes sent via SQL*Net to client

416 bytes received via SQL*Net from client

2 SQL*Net roundtrips to/from client

0 sorts (memory)

0 sorts (disk)

8 rows processed

SQL>

1.2 使用SQL

SQL>EXPLAIN PLAN FOR sql语句;

SQL>SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE')); 示例:

SQL>EXPLAIN PLAN FOR SELECT * FROM DAVE;

已解释。

SQL> SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE')); 或者:

…… …… 余下全文

篇七 :怎样看懂Oracle的执行计划

怎样看懂Oracle的执行计划

一、什么是执行计划

An explain plan is a representation of the access path that is taken when a query is executed within Oracle.

二、如何访问数据

At the physical level Oracle reads blocks of data. The smallest amount of data read is a single Oracle block, the largest is constrained by operating system limits (and multiblock i/o). Logically Oracle finds the data to read by using the following methods:

Full Table Scan (FTS) --全表扫描

Index Lookup (unique & non-unique) --索引扫描(唯一和非唯一) Rowid --物理行id

三、执行计划层次关系

When looking at a plan, the rightmost (ie most inndented) uppermost operation is the first thing that is executed. --采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID就最先执行

1.看一个简单的例子:

Query Plan

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

SELECT STATEMENT [CHOOSE] Cost=1234

**TABLE ACCESS FULL LARGE [:Q65001] [ANALYZED] --[:Q65001]表示是并行方式,[ANALYZED]表示该对象已经分析过了

…… …… 余下全文

篇八 :Oracle索引使用和执行计划

Oracle索引使用和执行计划

索引( Index )是常见的数据库对象,它的设置好坏、使用是否得当,极大地影响数据库应用程序和Database 的性能。

当你运用SQL语言,向数据库发布一条查询语句时,ORACLE将伴随产生一个“执行计划”,也就是该语句将通过何种数据搜索方案执行,是通过全表扫描、还是通过索引搜寻等其它方式。搜索方案的选用与ORACLE的优化器息息相关。

一、SQL语句的执行步骤和ORACLE的优化器 一条SQL语句的处理过程要经过以下几个步骤:

1 语法分析 分析语句的语法是否符合规范,衡量语句中各表达式的意义。 2 语义分析 检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。 3 视图转换 将涉及视图的查询语句转换为相应的对基表查询语句。

4 表达式转换 将复杂的SQL表达式转换为较简单的等效连接表达式。

5 选择优化器 不同的优化器一般产生不同的“执行计划”

6 选择连接方式 ORACLE有三种连接方式,对多表连接ORACLE可选择适当的连接方式。 7 选择连接顺序 对多表连接ORACLE选择哪一对表先连接,选择这两表中哪个表做为源数据表。 8 选择数据的搜索路径 根据以上条件选择合适的数据搜索路径,如是选用全表搜索还是利用索引或是其他的方式。

9 运行“执行计划”

ORACLE的优化器

ORACLE有两种优化器:基于规则的优化器(RBO, Rule Based Optimizer),和基于代价的优化器(CBO, Cost Based Optimizer)。

RBO自ORACLE 6版以来被采用,有着一套严格的使用规则,只要你按照它去写SQL语句,无论数据表中的内容怎样,也不会影响到你的“执行计划”,也就是说对数据不“敏感”,ORACLE公司已经不再发展这种技术了。

CBO自ORACLE 7版被引入,ORACLE自7版以来采用的许多新技术都是基于CBO的,如星型连接排列查询,哈希连接查询,和并行查询等。CBO计算各种可能“执行计划”的“代价”,即cost,从中选用cost最低的方案,作为实际运行方案。各“执行计划”的cost的计算根据,依赖于数据表中数据的统计分布,ORACLE数据库本身对该统计分布并不清楚,须要分析表和相关的索引,才能搜集到CBO所需的数据。

…… …… 余下全文