执行计划

1. 预执行 explain plan for

实际并没有执行SQL语句。

SQL> explain plan for select ca_cstid from c_acc;

Explained.

SQL> @?/rdbms/admin/utlxpls

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3827578295

-----------------------------------------------------------------------------
| Id  | Operation     | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |      1 |      7 |      1   (0)| 00:00:01 |
|   1 |  INDEX FULL SCAN | DEPT_ACC |      1 |      7 |      1   (0)| 00:00:01 |
-----------------------------------------------------------------------------

8 rows selected.

SQL> @?/rdbms/admin/utlxplp

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3827578295

-----------------------------------------------------------------------------
| Id  | Operation     | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |      1 |      7 |      1   (0)| 00:00:01 |
|   1 |  INDEX FULL SCAN | DEPT_ACC |      1 |      7 |      1   (0)| 00:00:01 |
-----------------------------------------------------------------------------

8 rows selected.

SQL> select plan_table_output from table(DBMS_XPLAN.DISPLAY());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3827578295

-----------------------------------------------------------------------------
| Id  | Operation     | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |      1 |      7 |      1   (0)| 00:00:01 |
|   1 |  INDEX FULL SCAN | DEPT_ACC |      1 |      7 |      1   (0)| 00:00:01 |
-----------------------------------------------------------------------------

8 rows selected.

2. 即时执行计划

在执行SQL的同时查看执行计划。

SQL> set autotrace traceonly;    # 运行查询但不显示查询结果;显示执行计划与统计信息
SQL> select ca_cstid from c_acc;

Execution Plan
----------------------------------------------------------
Plan hash value: 3827578295

-----------------------------------------------------------------------------
| Id  | Operation     | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |      1 |      7 |      1   (0)| 00:00:01 |
|   1 |  INDEX FULL SCAN | DEPT_ACC |      1 |      7 |      1   (0)| 00:00:01 |
-----------------------------------------------------------------------------

Statistics
----------------------------------------------------------
      0  recursive calls
      0  db block gets
      1  consistent gets
      0  physical reads
      0  redo size
    530  bytes sent via SQL*Net to client
    519  bytes received via SQL*Net from client
      2  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
      1  rows processed

SQL>

SQL> set autotrace traceonly explain    #不运行查询(DML操作会运行);显示执行计划,不显示统计信息。
SQL> select ca_cstid from c_acc;

Execution Plan
----------------------------------------------------------
Plan hash value: 3827578295

-----------------------------------------------------------------------------
| Id  | Operation     | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |      1 |      7 |      1   (0)| 00:00:01 |
|   1 |  INDEX FULL SCAN | DEPT_ACC |      1 |      7 |      1   (0)| 00:00:01 |
-----------------------------------------------------------------------------

SQL>

3. 查看指定SQL执行计划

查看已经执行过的SQL的执行计划

查看v$sql_plan中最后一个会话SQL的执行计划

SQL> set linesize 160
SQL> select plan_table_output from table(dbms_xplan.display_cursor());

Execution Plan
----------------------------------------------------------
Plan hash value: 3713220770

----------------------------------------------------------------------------------------------------
| Id  | Operation              | Name       | Rows  | Bytes | Cost (%CPU)| Time       |
----------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |           |  8168 | 16336 |    29   (0)| 00:00:01 |
|   1 |  COLLECTION ITERATOR PICKLER FETCH| DISPLAY_CURSOR |  8168 | 16336 |    29   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------

通过SQL_ID查询其执行计划

SQL> set autotrace traceonly

SQL> select mb_id,mb_tname from mng_bak;

2294 rows selected.

Execution Plan
----------------------------------------------------------
Plan hash value: 1749878440

-----------------------------------------------------------------------------
| Id  | Operation      | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |        |  2294 | 59644 |     12   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| MNG_BAK |  2294 | 59644 |     12   (0)| 00:00:01 |
-----------------------------------------------------------------------------

Statistics
----------------------------------------------------------
      0  recursive calls
      0  db block gets
    188  consistent gets
      0  physical reads
      0  redo size
      90151  bytes sent via SQL*Net to client
       2191  bytes received via SQL*Net from client
    154  SQL*Net roundtrips to/from client
      0  sorts (memory)
      0  sorts (disk)
       2294  rows processed

SQL>

SQL> set autotrace off
SQL> select sql_id,child_number from v$sql where sql_text like ‘select mb_id,mb_tname from mng_bak%‘;

SQL_ID          CHILD_NUMBER
------------- ------------
bk8rtgsb6jm37         0

SQL>

SQL> set linesize 80
SQL> select plan_table_output from table(dbms_xplan.display_cursor(‘bk8rtgsb6jm37‘,0,‘TYPICAL‘));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID    bk8rtgsb6jm37, child number 0
-------------------------------------
select mb_id,mb_tname from mng_bak

Plan hash value: 1749878440

-----------------------------------------------------------------------------
| Id  | Operation      | Name    | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |        |        |        |     12 (100)|        |
|   1 |  TABLE ACCESS FULL| MNG_BAK |  2294 | 59644 |     12   (0)| 00:00:01 |

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
-----------------------------------------------------------------------------

13 rows selected.

4.  历史执行计划 dba_hist_sql_plan

dba_hist_sql_plan 与 dba_hist_sqltext 通过SQL_ID关联。

SQL> desc dba_hist_sqltext
Name                       Null?    Type
----------------------------------------- -------- ----------------------------
DBID                       NOT NULL NUMBER
SQL_ID                    NOT NULL VARCHAR2(13)
SQL_TEXT                        CLOB
COMMAND_TYPE                        NUMBER

SQL> select p.* from dba_hist_sqltext t,table(DBMS_XPLAN.DISPLAY_AWR(t.sql_id,null,null,‘TYPICAL‘)) p where t.sql_text like ‘select mb_id,mb_tname from mng_bak%‘;

no rows selected

时间: 2024-08-04 19:52:02

执行计划的相关文章

ORACLE实际执行计划与预估执行计划不一致性能优化案例

  在一台ORACLE服务器上做巡检时,使用下面SQL找出DISK_READ最高的TOP SQL分析时,分析过程中,有一条SQL语句的一些反常现象,让人觉得很奇怪: SELECT SQL_ID,        SQL_TEXT,        DISK_READS,        BUFFER_GETS,        PARSING_SCHEMA_NAME,        EXECUTIONS FROM   V$SQLAREA ORDER  BY DISK_READS DESC; 在SQL D

oracle查看执行计划

方法一: SQL> explain plan for select name from a,b where a.id=b.id; 已解释. SQL> select * from table(DBMS_XPLAN.DISPLAY); 方法二: SQL> set autotrace on explain;    //打开执行计划 SQL> select name from a,b where a.id=b.id; 查看结束后,记得关闭执行计划 SQL> set autotrace

闪回drop恢复表后sql执行计划异常

-----正常执行计划 set autotrace traceonly set linesize 1000 select /*+index(t idx_object_id)*/ * from t where object_id=19; Execution Plan ---------------------------------------------------------- Plan hash value: 2041828949 ------------------------------

查看Oracle执行计划的几种常用方法-系列1

SQL的执行计划实际代表了目标SQL在Oracle数据库内部的具体执行步骤,作为调优,只有知道了优化器选择的执行计划是否为当前情形下最优的执行计划,才能够知道下一步往什么方向. 执行计划的定义:执行目标SQL的所有步骤的组合. 我们首先列出查看执行计划的一些常用方法: 1. explain plan命令 PL/SQL Developer中通过快捷键F5就可以查看目标SQL的执行计划了.但其实按下F5后,实际后台调用的就是explain plan命令,相当于封装了该命令. explain plan

oracle稳定执行计划1

稳定执行计划 1 策略: Oracle的sql 执行计划在一些场景下会发生变化,导致系统会发生不可知的情况,影响系统的稳定性,特别是关键业务的sql. 比如下面的场景: 统计信息过老,重新收集了统计信息. 为表添加了新的分区,删除分区. 而oracle提供的稳定执行计划的策略也大致有: 存储纲要(stored outlines) Sql 基线(sql baseline 11g) Sql profile Hint 在这几种方式中,在应用端任何的sql变动都会使stored outlines, sq

SQL Server 执行计划解析

前置说明: 本文旨在通过一个简单的执行计划来引申并总结一些SQL Server数据库中的SQL优化的关键点,日常总结,其中的概念介绍中有不足之处有待补充修改,希望大神勘误. SQL语句如下: SELECT <所需列> --列太多,不一一列出 FROM study1 INNER JOIN series1 ON (study1.study_uid_id = series1.study_uid_id) --连接条件1 INNER JOIN image1 image1 ON (series1.seri

Mongodb索引和执行计划 hint 慢查询

查询索引 索引存放在system.indexes集合中 > show tables address data person system.indexes 默认会为所有的ID建上索引 而且无法删除 > db.system.indexes.find() { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "

Oracle性能优化之执行计划管理_超越OCP精通Oracle视频教程培训31

Oracle性能优化之执行计划管理_超越OCP精通Oracle视频教程培训31 本课程介绍: Oracle视频教程,风哥本套oracle教程培训<<Oracle数据库性能优化培训教程>>的第1/10套:Oracle性能优化之执行计划管理.主要学习Oracle性能优化简介,SQL 语句处理流程,软解析和硬解析,绑定变量及案例,游标的介绍,Oracle的优化器,执行计划的查看,SQL语句访问路径,SQL语句的连接方式,Oracle驱动表,执行计划的干预,常用hint提示的使用. 视频教

执行计划-数据访问方式(全表扫描与4种索引的方式)

执行计划 Oracle执行计划的相关概念: Rowid:系统给oracle数据的每行附加的一个伪列,包含数据表名称,数据库id,存储数据库id以及一个流水号等信息,rowid在行的生命周期内唯一. Recursive sql:为了执行用户语句,系统附加执行的额外操作语句,譬如对数据字典的维护等. Row source(行源):oracle执行步骤过程中,由上一个操作返回的符合条件的行的集合. Predicate(谓词):where后的限制条件. Driving table(驱动表):又称为连接的

查看sql执行计划

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 转:http://blog.itpub.net/29254281/viewspace-1153735/ @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.cs