ORACLE执行计划的介绍

简介: 1. 执行计划的介绍 执行计划描述了SQL引擎为执行SQL语句进行的操作;分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定时,必须知道执行计划; 2. 执行计划的获取方法 ORACLE提供了四种方法来获取执行计划。

1. 执行计划的介绍

执行计划描述了SQL引擎为执行SQL语句进行的操作;分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定时,必须知道执行计划;

2. 执行计划的获取方法

ORACLE提供了四种方法来获取执行计划。

? 执行SQL语句EXPLAIN PLAN,然后查询结果输出表。

? 查询一张动态性能视图,它显示缓存中库缓存中的执行计划。

? 查询自动工作量资料库或查询Statspack表,它显示存储在资料库中的执行计划。

? 启动提供执行计划的跟踪功能。

1) SQL语句EXPLAIN PLAN

SQL语句EXPLAIN  PLAN的目的是以一条SQL语句作为输入,得到这条语句的执行计划和相关信息,并将它们作为输出存储在计划表中,原理是通过它可以询问查询优化器,对给定的是SQL语句会采用怎样的执行计划;

? 支持的SQL语句:SELECT 、INSERT、UPDATA、MERGE、DELETE、CREATE TABLE、CREATE INDEX和ALTER  INDEX;

? 语句的语法:

1、输入语句:EXPLAIN PLAN FOR  SELECT  * FROM TABLE;

2、查看查询优化器的执行计划:SELECT * FROM TABLE(dbms_xplan.display);

? 使用缺陷:绑定变量的陷阱;

? 避免办法:

A)在解析执行计划的时候也用绑定变量输入,但是绑定变量默认的是用VARCHAR2类型的,因此,为了避免饮食转换,数据库引擎自动添加一个显示转换。

B)对所有不是VARCHAR2类型的绑定变量使用显示转换。

? 该方法没有真正执行相应的SQL语句。

2) 动态性能视图

有四个动态性能视图展示库缓存中当前的游标信息;

? V$sql_plan视图提供最基础的信息和计划表相同,主要包括执行计划和查询优化器提供的一些相关信息。此视图和计划表唯一显著的不同点在于,它有一些字段可用来标识与库缓存中的执行计划和相关游标;

? V$sql_plan_statistics。视图为v$sql_plan视图中的每一个操作,诸如用掉的时间和产生的记录数,它提供了执行计划的运行时行为。

? 查看动态性能视图:

? 根据sql语句查找相应的sql_id:

SQL > select * from v$sql  where sql_text like 'select * from ';

? 查看相应的执行计划:

SQL > SELECT * FROM TABLE(dbms_xplan.display_cursor(‘sql_id’,child number)

3) AWR和Statspack

当采集快照(snapshot)的时候,awr和statspack就能够收集执行计划。为了得到执行计划,需要查询前面一节提到的动态性能视图。一旦完成,执行计划通过企业管理器用报告或awr展示出来;

存放在awr报告中的执行计划,都是一段时间内比较消耗资源的sql语句;

? Awr报告可以在视图dba_hist_sql_plan中查到;select * from dba_hist_sql_plan;

? 执行计划可以通过display_awr进行查看;select * from table(dbms_xplan.display_awr('sql_id'));

4) 跟踪trace功能

? 10053事件

10053可以产生跟踪文件,详细记录语句的产生内容;

Alter session set  events ‘10053 trace name context forever’;  打开跟踪;

Alter session set  events ‘10053 trace name context off’;关闭跟踪;

? 10132事件

通过10132事件也可以产生一个跟踪文件,文件将包含每一个硬解析的执行计划。

Alter session set  events ‘10132  trace name context forever’;  打开跟踪;

Alter session set  events ‘10132  trace name context off’;关闭跟踪;

2. 解读执行计划

执行计划大家都知道这个东西,关于执行计划的获取我们也知道了主要的几种方法,现在和大家学习执行计划解读;

1) 关键术语:父子关系

执行计划是一个树形结构,不仅阐述了SQL引擎执行操作的顺序,也阐明了他们之间的关系。树的每一个节点都代表一个操作,比如,表访问、连接或排序。

在各操作节点之间,存在父子关系,控制父子关系的规则如下:

? 父有一个或者多个子。

? 子只有一个父

? 唯一没有父的操作是根;

? 子节点都会在父节点缩进的右侧,所有的子节点的缩进都是一致的;

? 父节点的id小于子节点,最靠近子节点是他的父几点;

2) 执行计划的查看

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

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

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

|   0 | SELECT STATEMENT                |                       |     1      |          5 |     13902   (2) | 00:02:47 |

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

|* 2 |   INDEX FAST FULL SCAN      | MSEG~WZQ |  5300K|    25M |       13901   (2)| 00:02:47 |

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

Predicate Information (identified by operation id):

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

   2 - filter("WERKS"='1100')

? 执行顺序:从子节点到父节点;子节点之间从上往下执行;

? *星号代表该执行计划有过滤条件;

? Filter代表把结果查找出来后再进行过滤;

? Access代表对数据查询的时候就进行过滤;(Access的效率会比Filter高)

相关文章
|
10月前
|
SQL 缓存 监控
Oracle中如何生成有用的SQL 执行计划(译)
漫画戴夫·艾伦(Dave Allen)曾经讲过一个古老的笑话,一个旅行者问路人去某个城镇的路,路人只是说:“如果我是你,我就不会从这里开始。”
114 0
|
10月前
|
SQL 存储 缓存
获取和解读Oracle中SQL的执行计划(译文)
生成和显示 SQL 语句的执行计划是大多数 DBA、SQL 开发人员和性能专家的常见任务,因为它提供了 SQL 语句执行性能相关的信息。执行计划显示执行 SQL 语句的详细步骤,这些步骤表示为一组使用和生成行的数据库运算符。运算符的顺序和实现由查询优化器根据查询转换和物理优化技术来决定。
183 0
|
11月前
|
SQL Oracle 关系型数据库
Oracle优化05-执行计划
Oracle优化05-执行计划
405 0
|
SQL Oracle 关系型数据库
Oracle 性能优化技巧-获取真实执行计划
Oracle 性能优化技巧-获取真实执行计划
233 0
Oracle 性能优化技巧-获取真实执行计划
|
SQL 存储 Oracle
Oracle数据库 | SQL语句执行计划、语句跟踪与优化实例
Oracle数据库 | SQL语句执行计划、语句跟踪与优化实例
256 0
|
SQL Oracle 关系型数据库

推荐镜像

更多