使用Oracle脚本查看执行计划

声明:脚本来自《Pro Oracle SQL》一书,pln.sql

下面只是一个查看执行计划一种方法,就是通过加上备注表示唯一SQL语句:

[oracle@maa3 ~]$ cat pln.sql

SELECT xplan.*

FROM  

  (

  select max(sql_id) keep

 (dense_rank last order by last_active_time) sql_id

, max(child_number) keep

 (dense_rank last order by last_active_time) child_number

from v$sql

where upper(sql_text) like '%&1%'

 and upper(sql_text) not like '%FROM V$SQL WHERE UPPER(SQL_TEXT) LIKE %'

) sqlinfo,

  table(DBMS_XPLAN.DISPLAY_CURSOR(sqlinfo.sql_id, sqlinfo.child_number, 'ALLSTATS LAST')) xplan

/

luocs@MAA> @pln AAA

PLAN_TABLE_OUTPUT

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

SQL_ID  a151a11p17s10, child number 0

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

select /* aaa */ COUNT(OWNER) from t1 where owner='SYS'

Plan hash value: 1245464496

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

| Id  | Operation             | Name      | E-Rows |

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

|   0 | SELECT STATEMENT      |           |        |

|   1 |  SORT AGGREGATE       |           |      1 |

|*  2 |   INDEX FAST FULL SCAN| INX_OWNER |  19134 |

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

Predicate Information (identified by operation id):

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

2 - filter("OWNER"='SYS')

Note

-----

 - Warning: basic plan statistics not available. These are only collected when:

 * hint 'gather_plan_statistics' is used for the statement or

 * parameter 'statistics_level' is set to 'ALL', at session or system level

sys@MAA> alter system flush shared_pool;

System altered.

luocs@MAA> alter session set statistics_level=ALL;

Session altered.

luocs@MAA> select /* aaa */ COUNT(OWNER) from t1 where owner='SYS';

COUNT(OWNER)

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

19134

luocs@MAA> select /* www.luocs.com */ COUNT(OWNER) from t1 where owner='LUOCS';

COUNT(OWNER)

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

2

luocs@MAA> @pln AAA

PLAN_TABLE_OUTPUT

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

SQL_ID  a151a11p17s10, child number 0

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

select /* aaa */ COUNT(OWNER) from t1 where owner='SYS'

Plan hash value: 1245464496

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

| Id  | Operation             | Name      | Starts | E-Rows | A-Rows |   A-Time   | Buffers |

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

|   0 | SELECT STATEMENT      |           |      1 |        |      1 |00:00:00.01 |     116 |

|   1 |  SORT AGGREGATE       |           |      1 |      1 |      1 |00:00:00.01 |     116 |

|*  2 |   INDEX FAST FULL SCAN| INX_OWNER |      1 |  19134 |  19134 |00:00:00.01 |     116 |

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

Predicate Information (identified by operation id):

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

2 - filter("OWNER"='SYS')

luocs@MAA> @pln WWW.LUOCS.COM

PLAN_TABLE_OUTPUT

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

SQL_ID  fczadm51f27c4, child number 0

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

select /* www.luocs.com */ COUNT(OWNER) from t1 where owner='LUOCS'

Plan hash value: 3047016978

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

| Id  | Operation         | Name      | Starts | E-Rows | A-Rows |   A-Time   | Buffers |

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

时间: 2024-10-31 12:40:56

使用Oracle脚本查看执行计划的相关文章

ORACLE数据库查看执行计划

基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分析执行计划对SQL进行优化做相应说明. 一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等. 很多人以为PL/SQL的执行计划只能看到基数.优化器.耗

ORACLE数据库查看执行计划的方法_oracle

一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等. 很多人以为PL/SQL的执行计划只能看到基数.优化器.耗费等基本信息,其实这个可以在PL/SQL工具里面设置的.可以看到很多其它信息,如下所示 2: 在SQL*PLUS(PL/SQL的命令窗口和SQL窗口均可)下执行下面步骤 复制代码 代码如下: SQL>EXPLAIN PLAN FOR SEL

Oracle查看执行计划的几种方法

Oracle查看执行计划的几种方法   一般来说,有如下几种获取执行计划的方式: 1.AUTOTRACE方式 AUTOTRACE是Oracle自带的客户端工具SQL*Plus的一个特性.启用AUTOTRACE后,SQL*Plus会自动收集执行过的SQL语句的执行计划.性能统计数据等,并在语句执行结束后显示在SQL*Plus中. DBA用户可以直接使用AUTOTRACE功能,但是如果用户没有DBA权限,那么需要在SYS用户下执行plustrce.sql脚本,自动创建PLUSTRACE角色,再把PL

【SPM】Oracle如何固定执行计划

[SPM]Oracle如何固定执行计划   1.1  BLOG文档结构图   1.2  前言部分   1.2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 固定执行计划的常用方法:outline.SQL Profile.SPM(重点) ② coe_xfr_sql_profile.sql脚本的使用     Tips:        ① 若文章代码格式有错乱,推荐使用QQ.搜狗或360浏览器,也可以下载pdf格式

Oracle中获取执行计划的几种方法分析

以下是对Oracle中获取执行计划的几种方法进行了详细的分析介绍,需要的朋友可以参考下   1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中. 首先,在你要执行的SQL语句前加explain plan for,此时将生成的执行计划存储到计划表中,语句如下: explain plan for SQL语句然后,在计划表中查询刚刚生成的执行计划,语句如下: select * from table(

[20120112]谨慎使用set autotrace traceonly查看执行计划.txt

自己经常在优化sql语句是经常使用set autotrace traceonly来优化sql语句.这样的好处是如果输出记录很多,可以不受干扰,直接查看执行计划以及执行计划的统计信息.但是在一些特殊情况要注意也许执行计划是不真实的. SQL> select * from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 11g

oracle 12c R1执行计划新特性-table access by index rowid batched和INMOMEORY OPTION

oracle 12c R1执行计划在索引回表阶段oracle推出了batched特性,类似于oracle 11g中在nested loop中被驱动表回表时的向量IO,也是为了有效的解决表中数据无序性(索引的聚簇因子),下面看实际测试用例: 数据库版本:12.1.0.2版本 sys@CRMDB2> explain plan for SELECT offering_inst_id,        offering_id,        owner_party_role_type,        ow

【显示执行计划】在普通用户下使用set autot 查看执行计划

在普通用户下查看执行计划 时 ,会遇到如下问题: SQL> CONN SCOTT/SCOTT 已连接. SQL> SET AUTOT TRACE搜集统计信息时出错 ORA-942 SP2-0611: 启用 STATISTICS 报告时出错 SQL> SET AUTOT ON 搜集统计信息时出错 ORA-942 SP2-0611: 启用 STATISTICS 报告时出错 SQL> SET AUTOT OFF SQL> SET AUTOT ON 搜集统计信息时出错 ORA-942

查看ORACLE的实际执行计划

    ORACLE的执行计划分为预估执行计划和实际执行计划.其中,你用Toad.PL/SQL Developer.SQL Developer.EXPLAIN PLAN FOR或者SET ATUOTRACE TRACEONLY等获取的执行计划都是预估的执行计划.有时候预估执行计划和实际执行计划有很大的差别,所以有时候,调优的时候需要对比实际执行计划和 预估的执行计划,不能被预估的执行计划给欺骗了.那么我们怎么查看实际的执行计划呢?   方法1:查询v$sql_plan视图中的实际执行计划 1:在