篇一 :Oracle中查看已执行sql的执行计划

Oracle中查看已执行sql的执行计划

上一篇 / 下一篇 2008-09-12 10:54:07 / 个人分类:原创笔记

查看( 771 ) / 评论( 8 ) / 评分( 15 / 0 )

有时候我们可能会希望查看一条已经执行过的sql的执行计划,常用的方式有两种:a,set autotrace后再重新执行一遍,不过重新执行可能会浪费时间,而且有些语句也不允许(例如修改操作的语句),或者查询v$sql_plan视图,但v$视图的可读性又不是那么好,这里提供一个新方式,通过dbms_xplan.display_cursor来获取执行过的sql的执行计划。

首先看看该函数的语法:

DBMS_XPLAN.DISPLAY_CURSOR(

sql_id IN VARCHAR2 DEFAULT NULL,

child_number IN NUMBER DEFAULT NULL,

format IN VARCHAR2 DEFAULT 'TYPICAL');

由上可知,我们至少需要找到执行过sql的sql_id,该参数可以从v$sql视图中找到。

…… …… 余下全文

篇二 :怎样看懂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

…… …… 余下全文

篇三 :Oracle的执行计划查看方法

Oracle的执行计划查看方法

Oracle在执行一个SQL之前,首先需要看一下SQL的执行计划,然后在按照执行计划执行SQL,分析执行计划的工作是由优化器来执行的,在不同的条件下,一个SQL可能存在多条执行计划,但是在某个特定的时间点,特定的环境下,一定只有一种执行计划是最优的。

1、 Oracle的优化方式

Oracle有两种优化方式:RBO(Rule-Based Optimization)和CBO(Cost-Based Optimization)

RBO: 优化器在分析SQL语句的时候所遵循的优化规则是基于Oracle内部预定的一些规则。

CBO: 优化器字分析SQL语句的时候主要是看语句执行的开销(Cost),这里的代价主要指CPU和内存,优化器在判断是否使用这种方式的时候,主要参照的是表及索引的统计信息。统计信息给出表的大小,有多少行,每行的长度等信息。

2、 优化器的优化模式

优化模式包括:Rule, Choose, First Rows, All Rows四种模式。

Rule:走基于规则的模式。

Choose:默认情况下Oracle使用这种优化模式,当一个表或索引有统计信息的时候,走CBO的方式;如果表或索引没有统计信息,表又不是特别的小,且相应的字段有索引,则走RBO的方式。在缺省情况下,ORACLE采取Choose的优化模式,为了避免不必要的Full Table Scan,尽量避免采取此种优化模式,而直接采取CBO或者RBO的优化模式。

…… …… 余下全文

篇四 :怎样看懂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 三、执行计划层次关系

…… …… 余下全文

篇五 :半小时看懂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

三、执行计划层次关系

…… …… 余下全文

篇六 :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限制条件

…… …… 余下全文

篇七 :Oracle执行计划 SQL语句执行效率问题查找与解决方法

Oracle的SQL语句执行效率问题查找与解决方法

一、识别占用资源较多的语句的方法(4种方法)

1. 测试组和最终用户反馈的与反应缓慢有关的问题。

2. 利用V_$SQLAREA视图提供了执行的细节。(执行、读取磁盘和读取缓冲区的次数)

? 数据列

EXECUTIONS:执行次数

DISK_READS:读盘次数

COMMAND_TYPE:命令类型(3:select,2:insert;6:update;7delete;47:pl/sql程序单元)

OPTIMIZER_MODE:优化方式

SQL_TEXT:Sql语句

SHARABLE_MEM:占用shared pool的内存多少

BUFFER_GETS:读取缓冲区的次数

? 用途

1、帮忙找出性能较差的SQL语句

2、帮忙找出最高频率的SQL

3、帮忙分析是否需要索引或改善联接

3. 监控当前Oracle的session,如出现时钟的标志,表示此进程中的sql运行时间较长。

4. Trace工具:

a) 查看数据库服务的初始参数:timed_statistics、user_dump_dest和

max_dump_file_size

…… …… 余下全文

篇八 :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) 对非唯一索引列上进行的任何查询。

…… …… 余下全文