篇一 :Oracle SQL执行计划的简单分析

我们对 SQL 语句进行调优时,非常重要的一个方法就是分析 SQL 的执行计划。查看 Oracle 中 SQL 语句的执行计划有很多方法,例如通过 PL/SQL Developer 、 EM 或者 SQLPLUS 工具等。这里以 SQLPLUS 为例。

在 SQLPLUS 使用命令 SET AUTOTRACE ON 后,可以在查询结果后看到该语句的执行计划。也可以使用 SET AUTOTRACE TRACEONLY 命令,只返回执行计划而不返回查询结果。例如执行一个简单的全表扫描语句,返回执行计划如下:


从上述执行计划可以看到,对表的访问为全表扫描( TABLE ACCESS FULL )。这种情况一般是没有索引或者索引不可用。我们执行的 SQL 语句是 select * from hr.employees ,该语句没有指定搜索条件,所以也只能是全表扫描。

接下来我们还可以看到一些关于执行计划的统计信息。对于这些信息的分析非常重要。通过查询 Oracle 的文档,可以看到具体解释如下:

Recursive CallsNumber of recursive calls generated at both the user and system level.

Oracle Database maintains tables used for internal processing. When it needs to change these tables, Oracle Database generates an internal SQL statement, which in turn generates a recursive call.

In short, recursive calls are basically SQL performed on behalf of your SQL. So, if you had to parse the query, for example, you might have had to run some other queries to get data dictionary information. These would be recursive calls. Space management, security checks, calling PL/SQL from SQL—all incur recursive SQL calls.

…… …… 余下全文

篇二 :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视图中找到。

下面,举个例子吧,执行一个简单查询:

SQL> select count(0) from cat_product cp,cat_drug cd where cp.medical_id=cd.id;

COUNT(0)

----------

118908

如果我们想获取该语句的实际执行计划,通过下列步骤:

1、查询v$sql视图,找到该语句的sql_id(注意哟,必须要确保你要查询的sql语句还在shared pool): SQL> select sql_id from v$sql where sql_text=

2 'select count(0) from cat_product cp,cat_drug cd where cp.medical_id=cd.id';

…… …… 余下全文

篇三 :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

b) Step 1: alter session set sql_trace=true

c) Step 2: run sql;

d) Step 3: alter session set sql_trace=false

e) Step 4:使用 “TKPROF”转换跟踪文件

f) Parse,解析数量大通常表明需要增加数据库服务器的共享池大小,

query或current提取数量大表明如果没有索引,语句可能会运行得更有效,

disk提取数量表明索引有可能改进性能,

library cache中多于一次的错过表明需要一个更大的共享池大小

二、如何管理语句处理和选项

…… …… 余下全文

篇四 :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执行计划详解

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执行计划

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

| 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执行计划解释

一.相关概念

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 11g性能优化-执行计划

Oracle ERP最佳技术实践 E-BUSINESS SUITE

ORACLE 性能优化之 执行计划

Author:

E-Mail:

Creation Date:

Last Updated:

Document Ref:

Version:

Approvals:

<Approver 1>

<Approver 2> 苏南生 nansheng.su#hand-china.com October 19, 2014 October 19, 2014 <Document Reference Number> DRAFT 1A Copy Number _____

Oracle ERP最佳技术实践

Doc Ref: <Document Reference Number> October 19, 2014错误!未找到引用源。 Document Control

Change Record

Reviewers

Distribution

Oracle 性能优化-执行计划

Oracle11g性能优化执行计划

Oracle11g性能优化执行计划

Oracle11g性能优化执行计划

Note To Holders: name on the equivalent of the cover page, for document control purposes. cover, for document control purposes. Document Control ii ompany Confidential - For internal use only

Oracle ERP最佳技术实践

Oracle 性能优化-执行计划 Doc Ref: <Document Reference Number> October 19, 2014错误!未找到引用源。 Contents Document Control .................................................................................................................. ii 1. 概要 ............................................................................................................................. 2 1.1 SQL性能优化概要 .............................................................................................................. 2 1.2 SQL语句缓存 ..................................................................................................................... 2 1.3 驱动表 ................................................................................................................................. 2 1.4 组合索引 ............................................................................................................................. 3 2. 执行计划 ..................................................................................................................... 5 2.1 执行计划概要 ..................................................................................................................... 5 2.2 执行计划案例一个 ............................................................................................................. 5 2.3 执行计划步骤 ..................................................................................................................... 6 2.4 全表扫描 ............................................................................................................................. 7 2.5 通过ROWID的表存取 ....................................................................................................... 8 2.6 索引扫描 ............................................................................................................................. 8 2.7 4种类型的索引扫描 ........................................................................................................... 9 3.未完待续 .............................................................................................................................. 11 3. Open and Closed Issues for this Deliverable ...................................................... 12 Open Issues ..................................................................................................................... 12 Closed Issues .................................................................................................................. 12 Document Control iii ompany Confidential - For internal use only

…… …… 余下全文