DBMS_XPLAN详细说明
执行计划的组成部分
正确的看执行计划
DBMS_XPLAN 这个包是一个很好查看执行计划,显示很多格式,来分析执行计划中存在的问题
format:控制详细执行计划输出的格式,包含以下内容:
- BASIC:显示最少的信息-ID,operation name
- TYPICAL :默认,在计划中显示最多相关信息(operation id,name,rows,bytes和cost),在适用时显示pruning 、parallel和predicate 信息
- SERIAL:像typical 除了并行信息不显示,即使在并行中执行
- ALL:最大用户级别,包含信息显示TYPICAL级别,在增加(PROJECTION、ALLAS和在分布式操作中REMOTE SQL)
format 关键字必须用逗号或者空格隔开
- ROWS-相关,显示优化器评估的行数
- BYTES-显示优化器评估的字节数量
- COST-显示优化器评估的代价信息
- PARATITION-显示优化器的裁集信息
- PARALLEL-显示PX信息(分配方法和表队列的信息)
- PREDICATE-显示谓词章节信息(predicate )
- PROJECTION-显示字段定义信息(projection)
- ALLAS-显示查询块名称/对象别名(QUERY BLOCK NAME/OBJECT ALIAS)
- REMOTE-显示分布式查询信息(如远程从分布式远程SQL)
- NOTE-显示计划中NOTE信息
- IOSTATS-当SQL语句被执行时,假如基本的计划统计信息被收集(使用gather_plan_statistics hint或设置statistics_level参数设置为ALL),用格式ALL来显示IO统计信息(或仅用LAST显示)对这个游标的执行
- MEMSTATS-假如PGA内存管理被启用(这个是,pga_aggregate_target参数设置非为0),这个格式允许显示内存的统计信息(如,操作者执行模式,内存被多少使用,多少的字节数被写入磁盘等),这些统计信息应用到内存敏感的操作如hash-join,排序或一些位图操作。
- ALLSTATS-‘IOSTATS MEMSTATS’的缩写
- LAST-默认,计划统计信息被显示游标中的全部的执行计划,关键字LAST被指定仅查看语句的最后一次执行计划
以下两种已经过时,但是支持向后的兼容性:
- RUNSTATS_TOT-跟IOSTATS类同,显示IO统计信息指定游标的全部统计信息
- RUNSTATS_LAST跟 IOSTATS LAST ,显示运行统计信息的游标最后一次统计信息
格式化关键字可以前缀通过标记‘-’排除指定的信息,如:‘-PROJECTION’就排除了projection 信息
类别分类和显示
| class level | alias | bytes | cost | note | predicate | parallel | partition | projection | outlines | peeked_binds | remote | rows |
| BASIC | ||||||||||||
| TYPICAL | Y | Y | Y | Y | Y | Y | Y | Y | ||||
| SERIAL | Y | Y | Y | Y | Y | |||||||
| ALL | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | |
| ADVANCED | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
执行计划的组成部分
- 目标SQL语句
- 执行计划的主要部分:路径、查询块命名、OUTline data、Predicate Information 、Column Projection Information
- 辅助信息:NOTE(11g的基数评估、sql profile、动态采样)
找到SQL_ID,调用DBMS_XPLAN包,格式化执行计划
SELECT
SQL_ID,
CHILD_NUMBER
FROM
V$SQL
WHERE
SQL_TEXT LIKE 'select * from GLL_OBJECT_0602 where object_id=7782%'
AND SQL_TEXT NOT LIKE '%V$SQL%';
SELECT
*
FROM
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('75nc852bx00ub',0,'ADVANCED')); SQL_ID 75nc852bx00ub, child number 0
-------------------------------------
select * from GLL_OBJECT_0602 where object_id=7782 Plan hash value: 2093672533 -----------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-----------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2 (100)| |
| 1 | TABLE ACCESS BY INDEX ROWID| GLL_OBJECT_0602 | 1 | 207 | 2 (0)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | IND_OBJECT | 1 | | 1 (0)| 00:00:01 |
----------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id):
------------------------------------------------------------- 1 - SEL$1 / GLL_OBJECT_0602@SEL$1
2 - SEL$1 / GLL_OBJECT_0602@SEL$1 Outline Data
------------- /*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('11.2.0.3')
DB_VERSION('11.2.0.3')
ALL_ROWS
OUTLINE_LEAF(@"SEL$1")
INDEX_RS_ASC(@"SEL$1" "GLL_OBJECT_0602"@"SEL$1" ("GLL_OBJECT_0602"."OBJECT_ID"))
END_OUTLINE_DATA
*/ Predicate Information (identified by operation id):
--------------------------------------------------- 2 - access("OBJECT_ID"=7782) Column Projection Information (identified by operation id):
----------------------------------------------------------- 1 - "GLL_OBJECT_0602"."OWNER"[VARCHAR2,30],
"GLL_OBJECT_0602"."OBJECT_NAME"[VARCHAR2,128],
"GLL_OBJECT_0602"."SUBOBJECT_NAME"[VARCHAR2,30], "OBJECT_ID"[NUMBER,22],
"GLL_OBJECT_0602"."DATA_OBJECT_ID"[NUMBER,22],
"GLL_OBJECT_0602"."OBJECT_TYPE"[VARCHAR2,19], "GLL_OBJECT_0602"."CREATED"[DATE,7],
"GLL_OBJECT_0602"."LAST_DDL_TIME"[DATE,7], "GLL_OBJECT_0602"."TIMESTAMP"[VARCHAR2,19],
"GLL_OBJECT_0602"."STATUS"[VARCHAR2,7], "GLL_OBJECT_0602"."TEMPORARY"[VARCHAR2,1],
"GLL_OBJECT_0602"."GENERATED"[VARCHAR2,1], "GLL_OBJECT_0602"."SECONDARY"[VARCHAR2,1],
"GLL_OBJECT_0602"."NAMESPACE"[NUMBER,22], "GLL_OBJECT_0602"."EDITION_NAME"[VARCHAR2,30]
2 - "GLL_OBJECT_0602".ROWID[ROWID,10], "OBJECT_ID"[NUMBER,22] Note
-----
- dynamic sampling used for this statement (level=2)
输出格式中真实ROWS
获取SQL_ID
select /*+gather_plan_statistics*/ * from GLL_OBJECT_0602 where object_id=:id
SELECT
*
FROM
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('3ap5ukwk8gs9g',0,'ALLSTATS LAST +PEEKED_BINDS +PROJECTION +ALIAS +PREDICATE +COST +BYTES'));
SQL_ID 3ap5ukwk8gs9g, child number 0
-------------------------------------
select /*+gather_plan_statistics*/ * from GLL_OBJECT_0602 where
object_id=:id Plan hash value: 3717822783 --------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows |E-Bytes| Cost (%CPU)| A-Rows | A-Time | Buffers |
--------------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | | 293 (100)| 1 |00:00:00.01 | 1072 |
|* 1 | TABLE ACCESS FULL| GLL_OBJECT_0602 | 1 | 872 | 176K| 293 (1)| 1 |00:00:00.01 | 1072 |
-------------------------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id):
------------------------------------------------------------- 1 - SEL$1 / GLL_OBJECT_0602@SEL$1 Predicate Information (identified by operation id):
--------------------------------------------------- 1 - filter("OBJECT_ID"=TO_NUMBER(:ID)) Column Projection Information (identified by operation id):
----------------------------------------------------------- 1 - "GLL_OBJECT_0602"."OWNER"[VARCHAR2,30], "GLL_OBJECT_0602"."OBJECT_NAME"[VARCHAR2,128],
"GLL_OBJECT_0602"."SUBOBJECT_NAME"[VARCHAR2,30], "OBJECT_ID"[NUMBER,22],
"GLL_OBJECT_0602"."DATA_OBJECT_ID"[NUMBER,22], "GLL_OBJECT_0602"."OBJECT_TYPE"[VARCHAR2,19],
"GLL_OBJECT_0602"."CREATED"[DATE,7], "GLL_OBJECT_0602"."LAST_DDL_TIME"[DATE,7],
"GLL_OBJECT_0602"."TIMESTAMP"[VARCHAR2,19], "GLL_OBJECT_0602"."STATUS"[VARCHAR2,7],
"GLL_OBJECT_0602"."TEMPORARY"[VARCHAR2,1], "GLL_OBJECT_0602"."GENERATED"[VARCHAR2,1],
"GLL_OBJECT_0602"."SECONDARY"[VARCHAR2,1], "GLL_OBJECT_0602"."NAMESPACE"[NUMBER,22],
"GLL_OBJECT_0602"."EDITION_NAME"[VARCHAR2,30]
查询块的输出,可以把内联视图的信息,在主查询中去定义全表扫描还是索引访问
SQL_ID 896fbd4yjghj8, child number 0
-------------------------------------
select /*+ FULL(@strange dept) */ ENAME from emp e, (select /*+
QB_NAME(strange) */* from dept where deptno=20) d where
e.deptno=d.deptno and d.loc= 'DALLAS' Plan hash value: 4192419542 ---------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 6 (100)| |
| 1 | NESTED LOOPS | | 1 | 31 | 6 (0)| 00:00:01 |
|* 2 | TABLE ACCESS FULL| DEPT | 1 | 11 | 3 (0)| 00:00:01 |
|* 3 | TABLE ACCESS FULL| EMP | 5 | 100 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id):
------------------------------------------------------------- 1 - SEL$DB579D14
2 - SEL$DB579D14 / DEPT@STRANGE
3 - SEL$DB579D14 / E@SEL$1
| 前缀 | 行源操作 |
| CRI$ | CREATE INDEX statement |
| DEL$ | DELETE STATEMENT |
| INS$ | INSERT statement |
| MISC$ | miesc SQL 类似 lock table |
| MRG$ | Merge Statement |
| SEL$ | SELECT statement |
| SET$ | Set operators |
| UPD$ | Update statement |
STARTS 实际执行行源的次数
SELECT
*
FROM
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('bv3a5xts1cuh2',0,'ALLSTATS +PEEKED_BINDS +COST -PREDICATE')); SQL_ID 0v8h8ka3hr0bp, child number 0
-------------------------------------
select /*+gather_plan_statistics*/ ENAME from emp e, (select * from
dept where deptno=20) d where e.deptno=d.deptno and d.loc= 'DALLAS' Plan hash value: 568005898 ---------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | Cost (%CPU)| A-Rows | A-Time | Buffers |
---------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 4 (100)| 5 |00:00:00.01 | 9 |
| 1 | NESTED LOOPS | | 1 | 5 | 4 (0)| 5 |00:00:00.01 | 9 |
| 2 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 1 | 1 (0)| 1 |00:00:00.01 | 2 |
| 3 | INDEX UNIQUE SCAN | PK_DEPT | 1 | 1 | 0 (0)| 1 |00:00:00.01 | 1 |
| 4 | TABLE ACCESS FULL | EMP | 1 | 5 | 3 (0)| 5 |00:00:00.01 | 7 |
--------------------------------------------------------------------------------------------------------------- Note
-----
- dynamic sampling used for this statement (level=2)
remote的信息展示
PARALLEL信息展示
SELECT
*
FROM
TABLE(DBMS_XPLAN.DISPLAY_CURSOR('1ms60dn34wyy0',0,'ADVANCED')); SQL_ID 1ms60dn34wyy0, child number 0
-------------------------------------
select /*+PARALLEL(4)*/ ENAME from emp e, DEPT d where
e.deptno=d.deptno Plan hash value: 2873591275 --------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | TQ |IN-OUT| PQ Distrib |
--------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 2 (100)| | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM)| :TQ10000 | 14 | 280 | 2 (0)| 00:00:01 | Q1,00 | P->S | QC (RAND) |
| 3 | PX BLOCK ITERATOR | | 14 | 280 | 2 (0)| 00:00:01 | Q1,00 | PCWC | |
|* 4 | TABLE ACCESS FULL| EMP | 14 | 280 | 2 (0)| 00:00:01 | Q1,00 | PCWP | |
-------------------------------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id):
------------------------------------------------------------- 1 - SEL$F7859CDE
4 - SEL$F7859CDE / E@SEL$1 Outline Data
------------- /*+
BEGIN_OUTLINE_DATA
IGNORE_OPTIM_EMBEDDED_HINTS
OPTIMIZER_FEATURES_ENABLE('11.2.0.3')
DB_VERSION('11.2.0.3')
ALL_ROWS
SHARED(4)
OUTLINE_LEAF(@"SEL$F7859CDE")
ELIMINATE_JOIN(@"SEL$1" "D"@"SEL$1")
OUTLINE(@"SEL$1")
FULL(@"SEL$F7859CDE" "E"@"SEL$1")
END_OUTLINE_DATA
*/ Predicate Information (identified by operation id):
--------------------------------------------------- 4 - access(:Z>=:Z AND :Z<=:Z)
filter("E"."DEPTNO" IS NOT NULL) Column Projection Information (identified by operation id):
----------------------------------------------------------- 1 - "ENAME"[VARCHAR2,10]
2 - (#keys=0) "ENAME"[VARCHAR2,10]
3 - "ENAME"[VARCHAR2,10]
4 - "ENAME"[VARCHAR2,10] Note
-----
- dynamic sampling used for this statement (level=2)
- Degree of Parallelism is 4 because of hint
note信息
Note
-----
- dynamic sampling used for this statement (level=2)
- Degree of Parallelism is 4 because of hint Note
-----
- SQL profile “SQL_PROF_896fbd4yjghj8" used for this
statement 11g出现的基数评估
Note
-----
- Cardinality feedback used
输出指标的全部说明
| 指标参数 | 说明 |
| 通用内容 | |
| ID | 执行计划中每个步骤的标识符,如果前缀*,在谓词部分有谓词信息 |
| operation | 行源的操作方式 |
| name | 对象名称:表、索引、视图等 |
| CB0 解析时间信息 | |
| rows | 通过行源操作优化器评估的行返回的数量,来源操作对象的统计信息 |
| Bytes | 优化器评估的返回的数据量 |
| tempspc | 优化器评估临时空间的使用率 |
| Cost(%CPU) | 优化器行源操作的代价,CPU百分比代价给于()中独立的行源操作 |
| time | 评估需要执行这个操作的时间量,单位HH:MI: SS |
| 分区 | |
| Pstart | 第一个分区数目被访问 |
| Pstop | 最后一个分区数目被访问 |
| 并行处理 | |
| TQ | 表队列使用处理 |
| IN-OUT | 并行操作的关联 |
| PQ Distrib | 由服务器端使用分配并发送数据给客户端 |
| 真正运行统计信息 | |
| Starts | 多少次数数目操作被执行(核对更多嵌套循环操作) |
| A-ROWS | 行返回的真实数目 |
| A-TIMES | 真实的时间量花费在执行这个操作上 |
| I/O统计信息 | |
| buffers | 当每个步骤执行,逻辑读取操作执行 |
| read | 物理读取执行每个操作步骤 |
| write | 物理写入执行 |
| 内存使用统计 | |
| OMem | 最佳执行计划评估需要的内存(字节) |
| 1Mem | 1次通过执行评估需要的内存(字节) |
| 0/1/M | 通过最佳/1次通过/多模式执行的次数 |
| Used-Mem | 当最后一次执行这个操作使用的内存量(字节) |
| Used-Tmp | 最后执行这个操作使用的临时空间的量(KB) |
| Max-Tmp | 这个操作最大的使用临时空间量(KB) |
DBMS_XPLAN.DISPLAY_AWR输出awr中的历史执行计划,不在重复说明
限制说明
DISPLAY_AWR不能存储谓词信息
awr中没有存储全部的SQL语句,导致一些语句无法查看到历史的执行计划
DISPLAY_CURor在rac环境下,不能全部显示,只显示连接的节点,需要查看另外节点的话,连接到另一个节点
显示真实时间的统计信息需要SQL语句运行完成(需要长时间运行查询)
DBMS_XPLAN详细说明的更多相关文章
- dbms_xplan之display_cursor函数的使用
DBMS_XPLAN包中display_cursor函数不同于display函数,display_cursor用于显示SQL语句的真实的执行计划,在大多数情况下,显示真实的执行计划有助于更好的分析SQ ...
- dbms_xplan的display_cursor查看执行计划
准备工作: SQL> conn sys/root as sysdba Connected. SQL> grant select on v_$sql_plan to scott; Grant ...
- ZIP压缩算法详细分析及解压实例解释
最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...
- SASS教程sass超详细教程
SASS安装及使用(sass教程.详细教程) 采用SASS开发CSS,可以提高开发效率. SASS建立在Ruby的基础之上,所以得先安装Ruby. Ruby的安装: 安装 rubyinstaller- ...
- 史上最详细git教程
题外话 虽然这个标题很惊悚,不过还是把你骗进来了,哈哈-各位看官不要着急,耐心往下看 Git是什么 Git是目前世界上最先进的分布式版本控制系统. SVN与Git的最主要的区别 SVN是集中式版本控制 ...
- gulp详细入门教程
本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...
- windows环境下sublime的nodejs插件详细安装图解
前面的话 搜索了好多文档后,才成功地安装了sublime text3的nodejs插件.为了存档,也为了方便有同样需求的朋友,将其安装过程详细记录如下 安装nodejs 虽然nodejs官网提供了 ...
- 【详细教程】论android studio中如何申请百度地图新版Key中SHA1值
一.写在前面 现在越来越多的API接口要求都要求提供我们的项目SHA1值,开发版目前还要求不高,但是发布版是必定要求的.而目前定位在各大APP中也较为常见,当下主流的百度地图和高德地图都在申请的时候会 ...
- Oracle 11g必须开启的服务及服务详细介绍
转自:http://www.educity.cn/shujuku/404120.html 成功安装Oracle 11g数据库后,你会发现自己电脑运行速度会变慢,配置较低的电脑甚至出现非常卡的状况,通 ...
随机推荐
- WSL初体验
Windows10 新增加了WSL子系统, 体验了一下感觉还不错... 开启对应的功能后, 在商店里选择安装Ubuntu就可以了. 迁移文件系统 WSL 的文件系统位于 C 盘,当安装的软件越来越 ...
- 8.QList QMap QVariant
QList int main1(int argc, char *argv[]) { QApplication a(argc, argv); QList<,,}; mylist << ...
- 基于nginx的最基础的TCP代理,经过测试可通!
测试操作系统为win7,nginx版本为1.9.4. 在本机上编写java程序一个socket服务类SocketServer,监听端口为8889, (增加了一个SocketServerThread线程 ...
- ubuntu16.04 安装 docker
1,切换到root 2,更新系统 # apt-get update 3,安装 https和ca证书 # apt-get install apt-transport-https ca-certifica ...
- CLR寄宿和应用程序域
Win实际上将CLR作为一个COM服务器实现在一个DLL内,即为CLR定义了标准的COM接口,并为该接口和COM服务器分配一GUID,安装FrameWork时表示CLR的COM服务器被注册到注册表内. ...
- Android 对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果
转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming),请尊重他人的辛勤劳动成果,谢谢! 随着移动互联网的快速发展,它已经和我们的生活息息相关了,在 ...
- 云上建站快速入门:博客、论坛、CMS、电子商务网站统统搞定
现在制作一个网站已经越来越容易了,只要知道清晰的流程之后都是可以很快的建好一个企业或者个人网站的!免费的建站程序很多,下面听哥给你亮出来,建站一般来说分主要有这四步:申请域名.申请虚拟主机.制作网页, ...
- luogu P5290 [十二省联考2019]春节十二响 优先队列_启发式合并
思维难度不大,在考上上写的启发式合并写错了,只拿了 60 pts,好难过QAQ 没什么太难的,在考场上想出链的部分分之后很容易就能想到正解.没错,就是非常短的启发式合并.注意一下,写的要漂亮一点,否则 ...
- [置顶]
openHAB 体系结构与编程模型 (1) --- 术语
openHAB 术语 Item : 对硬件设备属性的抽象 ( Items are objects that can be read from or written to in order to int ...
- CF895C Square Subsets (组合数+状压DP+简单数论)
题目大意:给你一个序列,你可以在序列中任选一个子序列,求子序列每一项的积是一个平方数的方案数. 1<=a[i]<=70 因为任何一个大于2的数都可以表示成几个质数的幂的乘积 所以我们预处理 ...