Oracle获取执行计划的6种方法

一、什么是执行计划?
执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述。
执行计划描述了SQL引擎为执行SQL语句进行的操作,分析SQL语句相关的性能问题或仅仅质疑查询优化器的决定时,必须知道执行计划;所以执行计划常用语SQL调优。

二、怎么获取执行计划?(6种方法)
方法1:explain plan for explain [ɪkˈspleɪn]解释,说明
(1)获取步骤
步骤1:explain plan for + 跟上你要执行的SQL;
步骤2:select * from table(dbms_xplan.display());
(2)优点
无须真正执行,快捷方便
(3)缺点
1、没有输出运行时的相关统计信息(产生多少逻辑读;多少次递归调用;多少次物理读情况);
2、无法判断处理了多少行;
3、无法判断表被访问了多少次;
(4)应用场景
如果某SQL执行很长时间才出结果或返回不了结果

--1、explain plan for + 跟上你要执行的SQL 
EXPLAIN PLAN FOR
SELECT A.*, B.*FROM EMP ALEFT JOIN DEPT BON A.DEPTNO = B.DEPTNOWHERE A.EMPNO IN ('7369', '7499');
--2、dbms_xplan包括一系列函数,主要用于显示SQL语句的执行计划,且不用的情形下使用不同的函数来显示,
--如预估的执行计划则使用display函数,而实际的执行计划则是用display_cursor函数
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY());

在这里插入图片描述

方法2:set autotrace on 【自动跟踪】 trace [treɪs] 追踪
(1)获取步骤
步骤1::set autotrace on/traceonly
步骤2:在此处执行你的SQL
(2)优点
1、可以输出运行时的相关统计信息(产生多少逻辑读,多少递归调用,多少次物理读的情况);
2、虽然必须要等语句执行完毕后才可以输出执行计划,但是可以有traceonly开关来控制返回结果不大屏输出。
(3)缺点
1、必须要等语句真正执行完毕后,才可以出结果;
2、无法看到表被访问了多少次。

(4)应用场景
只能粗略知道recursive calls递归调用次数,详细用10046trace事件方法
recursive [rɪˈkɜːrsɪv] 递归

SET AUTOTRACE TRACEONLY
SELECT A.*, B.*FROM SCOTT.EMP ALEFT JOIN SCOTT.DEPT BON A.DEPTNO = B.DEPTNOWHERE A.EMPNO IN ('7369', '7499');

在这里插入图片描述
在这里插入图片描述

方法3:statistics_level=all statistics [stəˈtɪstɪks] 统计,level [ˈlevl] 层次,数量
(1)获取步骤
步骤1:alter session set statistics_level=all;
步骤2:在此处执行你的SQL
步骤3:select * from table(dbms_xplan.display_cursor(null,null,‘allstats last’));
(2)优点
1、可以清晰地从STATS得出表被访问多少次?
2、可以清晰地从E-ROWS和A-ROWS中得到预测的行数和真实的行数,从而可以准确判断oracle评估是否准确?
e-rows即为estimate-rows,是根据表的统计信息得来的预估行数;
a-rows即为actual-rows,是sql在执行过程中实际取到的行数。
3、虽然没有专门的输出运行时的相关统计信息,但是执行计划中的BUFFERS就是真实的逻辑读的数值。
(3)缺点
1、必须要等到语句真正执行完毕后,才可以出结果;
2、无法控制输出记录展现与否,而autotrace有traceonly可以控制不将输出记录打屏;
3、看不出递归调用的次数,看不出物理读的数值。
(4)应用场景
想要获取表被访问的次数,只能用方法3

starts:该SQL执行的次数
E-Rows:为执行计划预计的行数
A-Rows:实际返回的行数,E-Rows和A-Rows作比较,就可以看出具体哪一步执行计划出问题了。
A-Time:每一步实际执行的时间,可以看出耗时的SQL
Buffers:每一步实际执行的逻辑读或一致性读
在这里插入图片描述

方法4:dbms_xplan.display_cursor
(1)获取步骤
select * from table(dbms_xplan.display_cursor(‘&sq_id’));(该方法是从共享池里得到)
(2)优点
1、知道sql_id立即可得到执行计划,和explain plan for一样无须执行;
2、可以得到真实的执行计划。
(3)缺点
1、没有输出运行时的相关统计信息(产生多少逻辑读;多少次递归调用;多少次物理读情况);
2、无法判断处理了多少行;
3、无法判断表被访问了多少次;
(4)应用场景
观察某条SQL有多条执行计划的情况

方法5:事件10046trace跟踪
(1)获取步骤
步骤1:alter session set events’10046 trace name context forever,level 12’;(开启跟踪)
步骤2:执行你的语句
步骤3:alter session set events ‘10046 trace name context off’;(关闭跟踪)
步骤4:exit(退出当前窗口)
步骤5:找到跟踪后产生的文件 路径:此电脑/D/app/Administrator/diag/rdbms/prcl/trace
在这里插入图片描述

步骤6:tkprof trc 文件目标文件 【tkprof 是oracle自带的一个命令行工具,主要作用是将原始的跟踪文件转换为格式化的文本文件】
“ Tkprof全称:tool kit profiler trace kernel profiler” 工具包探查器跟踪内核探查器
trace文件(*.trc格式)对开发者来说是不可读的格式,需要把跟踪文件转换为为可读的格式,tkprof命令用是把跟踪文件格式的工具。
tkprof D:\app\Administrator\diag\rdbms\orcl\orcl\TRACE/orcl_ora_4308.trc d:\10046.txt SYS=NO SORT=prsela,exeela,fchela
(2)优点
1、可以看出SQL语句对应的等到事件;
2、如果SQL语句中有函数调用,SQL中有SQL,都将会被列出,无处循形;
3、可以方便地看出处理的行数,产生的物理逻辑读;
4、可以方便地看出解析时间和执行时间;
5、可以跟踪整个程序包
(3)缺点
1、步骤烦琐,比较麻烦;
2、无法判断表被访问了多少次;
3、执行计划中的谓词部分不能清晰地展现出来
(4)应用场景
如果SQL中含有函数,函数中又嵌套SQL等,即存在多层调用,想准确分析只能用该方法
在这里插入图片描述

方法6:awrsqrpt.sql
AWR全称叫Automatic Workload Repository-自动负载信息库,AWR 是通过对比两次快照(snapshot)收集到的统计信息。
AWRSQRPT可以生成指定快照区间目标SQL语句的统计报表,可以查看多个执行计划。
这个脚本可以很方便地取出某个sql在某两个快照间隔内,消耗cpu时间,执行次数,逻辑读,物理读,sql的执行计划以及sql的full sql text,对调优非常方便。
报告关注点:SQL ID部分的执行计划个数、Plan statistics 计划统计、Execution Plan 执行计划
Automatic [ˌɔːtəˈmætɪk] 自动的;Workload 工作量;Repository 知识宝典
(1)获取步骤
步骤1:以管理员用户的身份登录
sqlplus / as sysdba
在这里插入图片描述

步骤2:执行@?/rdbms/admin/awrsqrpt.sql 生产AWR报告
在这里插入图片描述

步骤3:填写要生成的报告格式,支持html和text,html是默认值可直接回车。
在这里插入图片描述

步骤4:要求输入要列出snap id的天数,一般最大保存了一个月的快照。依据自己的需要的时间段输入要列出最近几天的快照。
在这里插入图片描述

步骤5:要输入AWR报告启和止的snap_id,依据自己要的时间段输入snap id即可
步骤6:sql的id:0k8522rmdzg4k 默认值
查询SQL_ID,sql_text可以从AWR报告拿

select sql_text, last_load_time, t.SQL_IDfrom v$sql twhere last_load_time is not nulland sql_text like 'SELECT count(*) from%'order by t.LAST_LOAD_TIME desc

步骤7:最后要求输入报告名称
填写AWRSQRPT报告的名称,我可以填写awrsqrpt_20190421.html,然后在打印的日志里有文件保存的路径:,比如:D:\oracle\product\11.2.0\dbhome_1\RDBMS\ADMIN\awrsqrpt.html

(2)优点
可以方便地看到多个执行计划
(3)缺点
获取的过程比较麻烦
(4)应用场景
想观察某条SQL的多个执行计划用该方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/137314.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【使用教程】在Ubuntu下PMM60系列一体化伺服电机通过PDO跑循环同步位置模式详解

本教程将指导您在Ubuntu操作系统下使用PDO来配置和控制PMM60系列一体化伺服电机以实现循环同步位置模式。我们将介绍必要的步骤和命令,以确保您能够成功地配置和控制PMM系列一体化伺服电机。 一、准备工作 在正式介绍之前还需要一些准备工作:1.装有lin…

点亮一个灯

.text .global _start _start: RCC时钟使能 GPIOE RCC_MP_AHB$ENSETR[4]->1 LDR R0,0x50000a28 LDR R1,[R0] ORR R1,R1,#(0x1<<4) ORR R1,R1,#(0x1<<5) STR R1,[R0]设置PE10为输出模式 GPIOE_MODER[21:20]->01 先清0 LDR R0,0x50006000 LDR R1,[R0] BI…

Spark 读取ES采坑系列

目录 一、使用的插件 二、ES集群和Elasticsearch-hadoop版本问题 三、Elasticsearch-hadoop 和Scala版本以及Spark版本&#xff08;版本不匹配会有各种异常信息 一、使用的插件 <dependency><groupId>org.elasticsearch</groupId><artifactId>elas…

centos配置docker环境

CentOS系统更换软件安装源 yum默认链接的还是国外的镜像&#xff0c;速度相对不理想&#xff0c;配置成国内的镜像会快很多,这里以阿里镜像为例进行配置&#xff1a; 首先进行更新&#xff1a; yum updatebase源 第一步&#xff1a;备份你的原镜像文件&#xff0c;以免出错后…

为什么说软文推广中了解用户是关键?

数字化时代下软文成为众多企业推广品牌的方式之一&#xff0c;所谓软文&#xff0c;就是指以向用户提供信息&#xff0c;并将产品隐含在信息中的柔性手段。 想要使软文效果明显&#xff0c;就必须深入了解用户&#xff0c;把握其需求、兴趣和行为特点&#xff0c;这也是今天媒…

一篇文章教会你写一个贪吃蛇小游戏(纯C语言)

一篇文章教会你写一个贪吃蛇小游戏 1、游戏展示2、游戏功能3、Win32 API3.1 控制台程序3.2 控制台屏幕上的坐标COORD3.3 GetStdHandle函数3.4 GetConsoleCursorInfo函数3.4.1 CONSOLE_CURSOR_INFO结构体 3.5 SetConsoleCursorInfo函数3.6 SetConsoleCursorPosition函数3.7 GetA…

STM32-HAL库09-CAN通讯(loopback模式)

一、所用材料&#xff1a; STM32F103C6T6最小系统板 STM32CUBEMX&#xff08;HAL库软件&#xff09; MDK5 串口调试助手 二、所学内容&#xff1a; 初步学习如何使用STM32的CAN通讯功能&#xff0c;在本章节主要达到板内CAN通讯的效果&#xff0c;即32发送CAN信息再在CAN接收…

SpringBoot实现Excel导入导出

SpringBoot实现Excel导入导出 在我们平时工作中经常会遇到要操作Excel的功能&#xff0c;比如导出个用户信息或者订单信息的Excel报表。你肯定听说过 POI这个东西&#xff0c;可以实现。但是POI实现的API确实很麻烦&#xff0c;它需要写那种逐行解析的代码&#xff08;类似Xm…

关于mac下pycharm旧版本没删除的情况下新版本2023安装之后闪退

先说结论&#xff0c;我用的app cleaner 重新删除的pycharm &#xff0c;再重新安装即可。在此记录一下 之前安装的旧版的2020的pycharm&#xff0c;因为装不了新的插件&#xff0c;没办法就升级了。新装2023打开之后闪退&#xff0c;重启系统也不行&#xff0c;怀疑是一起破解…

3D全景技术,为我们打开全新宣传领域

随着科技的发展&#xff0c;3D全景技术正在融入我们的生活&#xff0c;这种全新视觉体验方式为我们打开了一扇全新的宣传领域&#xff0c;可以让我们多方位、多视角地探索各个行业&#xff0c;无论是对教育、商业、还是其他领域&#xff0c;都产生了深远的影响。 3D全景技术结合…

【每日一题】—— C. Anonymous Informant(Codeforces Round 908 (Div. 2))(思维题)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

Python基础入门----Python虚拟环境:为何要用虚拟环境、如何使用virtualenv

文章目录 在Python开发中,虚拟环境是一个独立的目录树,可以在其中安装Python模块。每个虚拟环境都有自己的Python二进制文件和一组安装的库。使用虚拟环境的主要原因是为了避免项目间的依赖冲突,允许每个项目有其特定的依赖,而不影响全局安装的模块。 为何要用虚拟环境 依…

三菱FX3U系列—原点回归指令

目录 一、简介 二、指令形式 1、原点指令[ZRN/DZRN] 2、带搜索的原点回归指令[DSZR] 三、回归指令运行过程 1、ZRN原点回归运行过程 2、带搜索的原点回归运行过程 四、特殊辅助继电器 五、特殊输出模块 六、总结 一、简介 用于将电机或伺服驱动器控制的轴回到预定的原…

Java枚举类的使用

说明: 根据设计图抽象的枚举类,一张模板背景图(会改变),二维码(传入参数生成),一个关闭的icon(固定不变) 设计图如下 枚举类 去除重复模板后共五个,根据需求编写枚举类如下,url则对应不同的模板,编写成后台人员的可配置项, public enum ImageTemplateEnum {PURCHASE("p…

【ES专题】ElasticSearch功能详解与原理剖析

目录 前言要点阅读对象阅读导航前置知识笔记正文一、ES数据预处理1.1 Ingest Node&#xff1a;摄入节点1.2 Ingest Pipeline&#xff1a;摄入管道1.3 Processor&#xff1a;预处理器——简单加工1.4 Painless Script&#xff1a;脚本——复杂加工1.5 简单实用案例 二、文档/数据…

springcloud二手交易平台系统源码

开发技术&#xff1a; 大等于jdk1.8&#xff0c;大于mysql5.5&#xff0c;idea&#xff08;eclipse&#xff09;&#xff0c;nodejs&#xff0c;vscode&#xff08;webstorm&#xff09; springcloud springboot mybatis vue elementui mysql 功能介绍&#xff1a; 用户端&…

时间序列预测模型实战案例(十)(个人创新模型)通过堆叠CNN、GRU、LSTM实现多元预测和单元预测

本文介绍 本篇博客为大家讲解的是通过组堆叠CNN、GRU、LSTM个数&#xff0c;建立多元预测和单元预测的时间序列预测模型&#xff0c;其效果要比单用GRU、LSTM效果好的多&#xff0c;其结合了CNN的特征提取功能、GRU和LSTM用于处理数据中的时间依赖关系的功能。通过将它们组合在…

Java根据一个List内Object的两个字段去重

背景 在Java开发过程中&#xff0c;我们经常会遇到需要对List进行去重的需求。 其中常见的情况是&#xff0c;将数组去重&#xff0c;或者将对象依据某个字段去重。这两种方式均可用set属性进行处理。 今天讨论&#xff0c;有一个List&#xff0c;且其中的元素是自定义的对象&…

【VUE+ elementUI 实现动态表头渲染】

VUE elementUI 实现动态表头渲染 1、定义 columns&#xff08;表头数据&#xff09; 和 dataList&#xff08;表格数据&#xff09; data() {return {loading: false,dataList: [{ name: 张三, sex: 男, age: 18 },{ name: 林琳, sex: 女, age: 20 },{ name: 王五, sex: 男, …

数据分析-numpy

numpy numpy numpy简介优点下载ndarray的属性输出数据类型routines 函数ndarray对象的读写操作ndarray的级联和切分级联切分 ndarray的基本运算广播机制&#xff08;Broadcast&#xff09;ndarry的聚合操作数组元素的操作numpy 数学函数numpy 查找和排序 写在最后面 简介 nump…