[terry笔记]oracle里的执行计划-查看
内容主要来自看书学习的笔记,如下记录了常见查询执行计划的方法。
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里的执行计划-查看的更多相关文章
- 基于Oracle的SQL优化(崔华著)-整理笔记-第2章“Oracle里的执行计划”
详细介绍了Oracle数据里与执行计划有关的各个方面的内容,包括执行计划的含义,加何查看执行计划,如何得到目标SQL真实的执行计划,如何查看执行计划的执行顺序,Oracle数据库里各种常见的执行计划的 ...
- Oracle性能优化之Oracle里的执行计划
一.执行计划 执行计划是目标SQL在oracle数据库中具体的执行步骤,oracle用来执行目标SQL语句的具体执行步骤的组合被称为执行计划. 二.如何查看oracle数据库的执行计划 oracle数 ...
- Oracle里的执行计划
1 执行计划的查看 1 explan plan 2 dbms_xplan包 3 sqlplus中 set autot 4 10046 5 awr报告 6一些现成的脚本 7 10053 常见的就前4种 ...
- Oracle中获取执行计划的几种方法分析
以下是对Oracle中获取执行计划的几种方法进行了详细的分析介绍,需要的朋友可以参考下 1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条S ...
- PL/SQL执行计划查看
一.如何查看PLSQL的执行计划 在SQl Window窗口输入sql语句,然后按键"F5",就会进入执行计划查看界面. 二.界面说明 首先我们看第二行有几个属性可以选“Tree” ...
- Oracle中的执行计划
使用autotrace sqlplus系统参数:SQL> set autotrace trace onSQL> select * from dual;DUM---XExecution Pl ...
- Oracle - SPM固定执行计划
1. 通过dbms_xplan.display_cursor查看指定sql都有哪些执行计划 SQL> select * from table(dbms_xplan.display_cursor( ...
- ORACLE数据库中执行计划出现INTERNAL_FUNCTION一定是隐式转换吗?
ORACLE数据库中,我们会使用一些SQL语句找出存在隐式转换的问题SQL,其中网上流传的一个SQL语句如下,查询V$SQL_PLAN的字段FILTER_PREDICATES中是否存在INTERNAL ...
- 查看ORACLE的实际执行计划
ORACLE的执行计划分为预估执行计划和实际执行计划.其中,你用Toad.PL/SQL Developer.SQL Developer.EXPLAIN PLAN FOR或者SET ATUOTRACE ...
随机推荐
- 05 ADO.net
ADO.NET就是一组类库 操作数据库用的.
- POJ 1743 [USACO5.1] Musical Theme (后缀数组+二分)
洛谷P2743传送门 题目大意:给你一个序列,求其中最长的一对相似等长子串 一对合法的相似子串被定义为: 1.任意一个子串长度都大于等于5 2.不能有重叠部分 3.其中一个子串可以在全部+/-某个值后 ...
- docker删除docker_gwbridge网桥
最后更新时间:2018年12月26日 使用命令:docker network rm docker_gwbridge 提示无法删除. [root@localhost ~]# docker network ...
- B-Tree概念
记录下学习B-Tree: concept:(m-阶) 1. 根节点 孩子数 ( 2 <= N <= m) 根节点key数([m/2] - 1 <= n <= m -1) 2 ...
- android 使用讯飞人脸识别api报错:java.lang.UnsatisfiedLinkError
1.在做一个人脸识别的项目,使用的是讯飞的api,编辑器为AS2.0,运行时报如下错误: FATAL EXCEPTION: main Process: com.adm ...
- jvm 垃圾回收概念和算法
1.概念 GC 中的垃圾,特指存在于内存中.不会再被使用的对象.垃圾回收有很多种算法,如引用计数法.复制算法.分代.分区的思想. 2.算法 1.引用计数法:对象被其他所引用时计数器加 1,而当引用失效 ...
- 【转】Visual Studio單元測試小應用-測執行時間
[转]Visual Studio單元測試小應用-測執行時間 Visual Studio的單元測試會記錄每一個測試的執行時間,如果有幾個Method要測效能,以前我會用Stopwatch,最近我都改用單 ...
- dubbo标签
<dubbo:service/> 服务配置,用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心. <dubbo:reference/&g ...
- leetcode 题解 || Longest Common Prefix 问题
problem: Write a function to find the longest common prefix string amongst an array of strings. 寻找 0 ...
- UBUNTU 16.04 下安装动态链接库方法(使用ln命令可以随意映射动态库,ldd查看缺少的动态库)
一般先使用ldd 来查看该应用程序缺少什么东西,然后,再根据sudo apt install XXX 去安装相应的动态库. 假如没有对应的库,可以使用: sudo ln -s /usr/lib/lib ...