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

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. 小程序(Wepy)--生成海报图片

    对于小程序的分享, 除了分享给朋友, 好友群,是可以直接做到的, 但是要想扩大推广范围, 通过生成海报图片, 将自己小程序码带进去,应该是目前我所知的好办法了. 但是海报也不是那么好搞.之前自己手写出 ...

  2. CF487E Tourists(圆方树+堆+链剖)

    本题解并不提供圆方树讲解. 所以不会圆方树的出门右转问yyb 没有修改的话圆方树+链剖. 方点的权值为点双连通分量里的最小值. 然后修改的话圆点照修,每一个方点维护一个小根堆. 考虑到可能被菊花卡死. ...

  3. 代理上网环境配置docker私有库

    最后更新时间:2018年12月27日 Docker使用代理上网去 pull 各类 images,需要做如下配置: 创建目录: /etc/systemd/system/docker.service.d ...

  4. python3 将两个列表生成一个字典

    需求: 存在两个list如下 list1 = ["one", "two", "three"] list2 = ["1", ...

  5. [转载] C 陷阱与缺陷( C traps and Pitfalls )

    本文转自 https://www.xuebuyuan.com/1951579.html 自己找工作过程中复习过的书包括<C traps and Pitfalls>,<编程珠玑> ...

  6. dubbo标签

    <dubbo:service/> 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心. <dubbo:reference/&g ...

  7. java 日期和字符串互转,依据当天整天时间 得到当天最后一秒的日期时间

    java 日期和字符串互转.依据当天整天时间   得到当天最后一秒的日期时间 package com.hi; import java.text.DateFormat; import java.text ...

  8. scp报错:Host key verification failed. REMOTE HOST IDENTIFICATION HAS CHANGED!

    1 scp报错:REMOTE HOST IDENTIFICATION HAS CHANGED! [root@xx ~]# scp yum-3.4.3.tar.gz 10.xx.xx.12:/root ...

  9. 文件类似性推断 -- SimHash

    近期调研了一下simhash算法,它主要用在谷歌网页去重中.网上有非常多原理性的介绍. 既然能够用来推断文件的相似性,就想知道效果怎么样.simhash的准确度是否依赖于分词算法?是否和simhash ...

  10. USACO 5.1.1凸包

    转自:http://blog.csdn.net/cnyali/article/details/50097593 程序: #include <iostream> #include <a ...