内容主要来自看书学习的笔记,如下记录了常见查询执行计划的方法。

2.2 如何查看执行计划
1.explain plan
2.dbms_xplan包
3.autotrace
4.10046事件
5.10053事件
6.awr/statspack报告(@?/rdbms/admin/awrsqrpt)
7.脚本(display_cursor_9i.sql)

2.2.1 explain plan
explain plan for sql
select * from table(dbms_xplan.display);
SQL> explain plan for select * from emp;
已解释。

SQL> select * from table(dbms_xplan.display);

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

Plan hash value: 3956160932

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

已选择8行。

其原理是oracle会把explain plan的sql的执行计划写入plan_table$,执行查询 table(dbms_xplan.display),会把其格式化后输出。
plan_table$是一个on commit preserve rows的global temporary table,各个session只能看到自己的,互不干扰。

2.2.2 dbms_xplan包
按照场景不同,有以下四种方法:
1.select * from table(dbms_xplan.display);
2.select * from table(dbms_xplan.display_cursor(null,null,’advanced’));
3.select * from table(dbms_xplan.display_cursor(’sql_id/hash_value’,child_cursor_number,’advanced’));
4.select * from table(dbms_xplan.display_awr(’sql_id'));

第一种方法就是explain plan。
第二种方法是查看刚刚执行过的sql的执行计划。
第三种方法是查看指定sql的执行计划,需要sql_id或hash_value,还有child_number(v$sql)。
select sql_text,sql_id,hash_value,child_number from v$sql where sql_text like ‘%xxxx%’;
第四种方法是查看指定sql所有历史执行计划,第二、第三种方法需要其sql执行计划还在shared pool种,如果被age out出shared pool(v$sqlarea中查询不到),只要其被采集到awr repository中,就可以用第四种方法查看。(v$sqlarea中的version_count代表有几个执行计划)
select sql_text,sql_id,version_count,executions from v$sqlarea where sql_text like ‘xxx’; —可以查询到
exec dbms_workload_repository.create_snapshot; --采集awr
alter system flush shared_pool;  —清理shared pool
select sql_text,sql_id,version_count,executions from v$sqlarea where sql_text like ‘xxx’; —查询不到
此时已经无法使用第二、第三种方法查看。但是第四种方法无法显示谓词条件,不完美。

2.2.3 autotrace
set autotrace {off|on|traceonly}
[explain]
[statistics]
不仅可以得到执行计划,还可以得到资源消耗量。
set autotrace on = set auto on —结果集+执行计划+消耗资源量
set autotrace off = set autot off --关闭
set autotrace traceonly = set auto trace —执行计划+消耗资源量
set autotrace traceonly explain = set autot trace exp --执行计划
set autotrace traceonly statistics = set autot trace stat —消耗资源量

2.2.4 10046事件与tkprof
1.激活10046事件
alter session set events '10046 trace name context forever,level 12';
oradebug setmypid;
oradebug event 10046 trace name context forever,level 12;
2.执行sql
3.关闭10046事件
alter session set events '10046 trace name context off'
oradebug event 10046 trace name context off
4.tkprof tracefile outputfile
注意oradebug只能sys用户使用,不是很方便。

使用display_cursor_9i.sql
@/xxx/display_cursor_9i.sql hash_value child_number
使用printsql
使用sys用户@/xxx/printsql.prc创建过程
set serveroutput on size 1000000
exec printsql(xxxxx,'SID')
exec printsql(xxxxx,'SPID')

2.3真实的执行计划
explain plan、set autotrace、select * from table(dbms_xplan.display)都有可能不准,主要是因为绑定变量,在默认开启绑定变量窥探bind peeking的情况下,以上方法的执行计划只是半成品。

2.4执行计划的执行顺序
先从最开头一直连续往右看,直到看到最右边的并列的地方;对于不并列的,靠右先执行;如果见到并列的,就从上往下看,对于并列的部分,靠上先执行。

[terry笔记]oracle里的执行计划-查看的更多相关文章

  1. 基于Oracle的SQL优化(崔华著)-整理笔记-第2章“Oracle里的执行计划”

    详细介绍了Oracle数据里与执行计划有关的各个方面的内容,包括执行计划的含义,加何查看执行计划,如何得到目标SQL真实的执行计划,如何查看执行计划的执行顺序,Oracle数据库里各种常见的执行计划的 ...

  2. Oracle性能优化之Oracle里的执行计划

    一.执行计划 执行计划是目标SQL在oracle数据库中具体的执行步骤,oracle用来执行目标SQL语句的具体执行步骤的组合被称为执行计划. 二.如何查看oracle数据库的执行计划 oracle数 ...

  3. Oracle里的执行计划

    1 执行计划的查看 1 explan plan 2 dbms_xplan包 3 sqlplus中 set autot 4 10046 5 awr报告 6一些现成的脚本 7 10053 常见的就前4种 ...

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

    以下是对Oracle中获取执行计划的几种方法进行了详细的分析介绍,需要的朋友可以参考下     1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条S ...

  5. PL/SQL执行计划查看

    一.如何查看PLSQL的执行计划 在SQl Window窗口输入sql语句,然后按键"F5",就会进入执行计划查看界面. 二.界面说明 首先我们看第二行有几个属性可以选“Tree” ...

  6. Oracle中的执行计划

    使用autotrace sqlplus系统参数:SQL> set autotrace trace onSQL> select * from dual;DUM---XExecution Pl ...

  7. Oracle - SPM固定执行计划

    1. 通过dbms_xplan.display_cursor查看指定sql都有哪些执行计划 SQL> select * from table(dbms_xplan.display_cursor( ...

  8. ORACLE数据库中执行计划出现INTERNAL_FUNCTION一定是隐式转换吗?

    ORACLE数据库中,我们会使用一些SQL语句找出存在隐式转换的问题SQL,其中网上流传的一个SQL语句如下,查询V$SQL_PLAN的字段FILTER_PREDICATES中是否存在INTERNAL ...

  9. 查看ORACLE的实际执行计划

    ORACLE的执行计划分为预估执行计划和实际执行计划.其中,你用Toad.PL/SQL Developer.SQL Developer.EXPLAIN PLAN FOR或者SET ATUOTRACE ...

随机推荐

  1. CSS Grid(CSS网格)

    Grid被设计来做一些Flexbox不能做的事情,所以不是被设计来取代Flexbox的. flexbox 一维的 Grid 二维的 总结:  Grid Items作用在Grid Container的直 ...

  2. HDU 2256 Problem of Precision( 矩阵快速幂 )

    链接:传送门 题意:求式子的值,并向下取整 思路: 然后使用矩阵快速幂进行求解 balabala:这道题主要是怎么将目标公式进行化简,化简到一个可以使用现有知识进行解决的一个过程!菜的扣脚...... ...

  3. BZOJ 2244 [SDOI2011]拦截导弹 (三维偏序CDQ+线段树)

    题目大意: 洛谷传送门 不愧为SDOI的duliu题 第一问?二元组的最长不上升子序列长度?裸的三维偏序问题,直接上$CDQ$ 由于是不上升,需要查询某一范围的最大值,并不是前缀最大值,建议用线段树实 ...

  4. 《一个民企CEO的职场阳谋》–读书总结(下)

    职场是一个战场,很多人几十年在这里战斗. 职场是一个熔炉,很多人大半生在这里修炼. 如果在办公室里得不到快乐,生活就不会快乐. 如果公司里头感觉不到幸福,人生就不会幸福.(以上四句来自老刘的博客) & ...

  5. java JSON 和 Object 相互转换

    1.导入 jackson jar <dependency> <groupId>com.fasterxml.jackson.core</groupId> <ar ...

  6. Java并发编程(七)ConcurrentLinkedQueue的实现原理和源码分析

    相关文章 Java并发编程(一)线程定义.状态和属性 Java并发编程(二)同步 Java并发编程(三)volatile域 Java并发编程(四)Java内存模型 Java并发编程(五)Concurr ...

  7. [React] Work with HTML Canvas in React

    React's abstraction over the DOM means that it's not always obvious how to do DOM-related things, li ...

  8. Android TextView 横向滚动(跑马灯效果)

    Android TextView 中当文字比較多时希望它横向滚动显示,以下是一种亲測可行的方法. 效果图: 1.自己定义TextView,重写isFocused()方法返回true,让自己定义Text ...

  9. 使用docker搭建hadoop分布式集群

    使用docker搭建部署hadoop分布式集群 在网上找了非常长时间都没有找到使用docker搭建hadoop分布式集群的文档,没办法,仅仅能自己写一个了. 一:环境准备: 1:首先要有一个Cento ...

  10. Non-ASCII character &#39;\xe8&#39; in file xxx.py on line 8, but no encoding declared

    使用网上某个python程序.编译时报错: File "xxx.py", line 8         SyntaxError: Non-ASCII character '\xe8 ...