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.rhkb.cn/news/189063.html

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

相关文章

docker启动某个镜像一直restarting状态

因为微服务学习的需要,就需要在虚拟机中安装一下Nacos,可哪儿能想到使用docker ps命令一直显示nacos的状态是restarting。 经过一番测试,发现并不是执行代码的问题。上网查了一下,也找不到合适的答案,终于查到了是doc…

Java自学第8课:电商项目(3) - 重新搭建环境

由于之前用的jdk和eclipse,以及mysql并不是视频教程所采用的,在后面运行源码和使用作者提供源码时,总是报错,怀疑: 1 数据库有问题 2 jdk和引入的jar包不匹配 3 其他什么未知的错误? 所以决定卸载jdk e…

SharePoint 的 Web Parts 是什么

Web Parts 可以说是微软 SharePoint 的基础组件。 根据微软自己的描述,Web Parts 是 SharePoint 对内容进行构建的基础,可以想想成一块一块的砖块。 我们需要使用这些砖块来完成一个页面的构建。 我们可以利用 Web Parts 在 SharePoint 中添加文本&am…

CVE-2023-25194 Kafka JNDI 注入分析

Apache Kafka Clients Jndi Injection 漏洞描述 Apache Kafka 是一个分布式数据流处理平台,可以实时发布、订阅、存储和处理数据流。Kafka Connect 是一种用于在 kafka 和其他系统之间可扩展、可靠的流式传输数据的工具。攻击者可以利用基于 SASL JAAS 配置和 SASL …

CSS 文字溢出省略号显示

1. 单行文本溢出显示省略号 需要满足三个条件,添加对应的代码: (1)先强制一行内显示文本; (2)超出的部分隐藏; (3)文字用省略号来替代省略的部分&#xf…

STM32-EXTI中断

EXTI简介 EXTI(Extern Interrupt)外部中断 EXTI可以监测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程…

【Proteus仿真】【STM32单片机】多路温度控制系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用按键、LED、蜂鸣器、LCD1602、DS18B20温度传感器、HC05蓝牙模块等。 主要功能: 系统运行后,默认LCD1602显示前4路采集的…

工业镜头接口类型

现有产品主要有以下接口 1、C:最常见的工业相机接口,受限于接口物理尺寸大小,最大靶面目前是4/3” 2、M42:M421.0,2k和4k线阵相机使用 3、M58S:M580.75,大靶面相机使用,可以转C(限于CH080相机,靶面4/3”),可以转F,可以…

UML/SysML建模工具更新(2023.10)(1)StarUML、Software Ideas Modeler

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 工具最新版本:Software Ideas Modeler 14.02 更新时间:2023年10月9日 工具简介 轻量级建模工具,支持UML、BPMN、SysML。 平台:Windo…

springboot全局拦截sql异常

起因:非法用户可通过特定的输入(如输入内容超长)等操作,使后台逻辑发生错误,从而使后台sql语句暴露至前台,进而为sql攻击提供条件 处理流程:经查找com.mysql.cj.jdbc.exceptions的父类为SQLException,在全局异常处理类中增加如下配置,经测试不起作用 ExceptionHandler(SQLExce…

Go RabbitMQ简介 使用

RabbitMQ简介 RabbitMQ 是一个广泛使用的开源消息队列系统,它实现了高级消息队列协议(AMQP)标准,为分布式应用程序提供了强大的消息传递功能。RabbitMQ 是 Erlang 语言编写的,具有高度的可扩展性和可靠性,…

Redis(12)| 过期删除策略和内存淘汰策略

Redis 是可以对 key 设置过期时间的,因此需要有相应的机制将已过期的键值对删除,而做这个工作的就是过期键值删除策略。 如何设置过期时间 先说一下对 key 设置过期时间的命令。 设置 key 过期时间的命令一共有 4 个: expire key n&#x…

HTTP和HTTPS详解

一)什么是HTTP协议 1)HTTP协议是倾向于相遇业务层次上面的一种协议,传输层协议主要考虑的是端对端之间的一个传输过程,TCP重点进行关注的是可靠传输;咱们的HTTP/1,HTTP/2是基于TCP的,但是咱们的HTTP/3是基于UDP的&…

全域旅游“一机游”智慧旅游平台解决方案:PPT全文48页,附下载

关键词:智慧文旅解决方案,智慧旅游解决方案,智慧旅游平台建设方案,智慧文旅综合运营平台,智慧文旅建设方案 一、智慧文旅一机游定义 智慧文旅一机游是一种新型的旅游方式,它通过智能化的设备和系统&#…

web前端开发第一次Dreamweave课堂练习/html练习代码《社会主义核心价值观》

目标图片: 文字素材: 社会主义核心价值观 Socialist Core Values 富强、民主、文明、和谐是国家层面的价值目标。 自由、平等、公正、法治是社会层面的价值取向。 爱国、敬业、诚信、友善是公民个人层面的价值准则。 Core socialist values are the…

网页判断版本更新

一、需求解析 为什么我会想到这个技术呢,是因为我有一次发现,我司的用户在使用网页的时候,经常会出现一个页面放很久,下班也不关这个页面,这样就会导致页面的代码长时间处于不更新的状态。 在使用到一个功能出了bug&a…

文本处理大师:Linux中grep、sed和awk的绝佳教程

1 grep 搜索关键字 全局搜索正则表达式 1.1 基本格式 grep root passwd #过滤含有root关键字-e 多个过滤词 grep -e root -e bash pa grep -E "root|bin" pa # 等同于上面的命令-i 忽略大小写 -E 过滤 grep -E "\<root" passwd ##root字符之前不能有…

Rt-Thread 移植6--多线程(KF32)

6.1 就绪列表 6.1.1 线程就绪优先级组 线程优先级表的索引对应的线程的优先级。 为了快速的找到线程在线程优先级表的插入和移出的位置&#xff0c;RT-Thread专门设计了一个线程就绪优先级组。线程就绪优先组是一个32位的整型数&#xff0c;每一个位对应一个优先级&#xff…

Nussbaumer Transform 以及 Amortized FHEW bootstrapping

参考文献&#xff1a; [Nuss80] Nussbaumer H. Fast polynomial transform methods for multidimensional DFTs[C]//ICASSP’80. IEEE International Conference on Acoustics, Speech, and Signal Processing. IEEE, 1980, 5: 235-237.[SV11] Smart N P, Vercauteren F. Full…

出口美国操作要点汇总│走美国海运拼箱的注意事项│箱讯科技

01服务标准 美国的货物需要细致的服务&#xff0c;货物到港后的服务也是非常重要的。如果在货物到港15天内&#xff0c;如果没有报关行进行(PROCEED)&#xff0c;货物就会进入了G.O.仓库&#xff0c;G.O.仓库的收费标准是非常高的。 02代理资格审核 美国航线除了各家船公司&a…