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 A
  LEFT JOIN DEPT B
    ON A.DEPTNO = B.DEPTNO
 WHERE 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 A
  LEFT JOIN SCOTT.DEPT B
    ON A.DEPTNO = B.DEPTNO
 WHERE 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_ID
      from v$sql t
     where last_load_time is not null
       and 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.mfbz.cn/a/120694.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

oracle使用regexp_substr来拆分,CONNECT BY LEVEL查询卡死,速度慢的问题。

一、问题 oracle 使用regexp_substrCONNECT BY LEVEL来,根据特定字符拆分成多行。 (注意这里我的数据是每个值都有“ ; ”,即使后面没有值,后面也会有个“ ; ”, 如果是正常的分隔符,sql 需要改成” LEVEL…

el-input-number输入框超过限制后自动变为最大值

input输入框使用了el-input-number 需求:目标室温输入框数据库设置最大是4位整数,限制一位小数,且后面要加单位,当输入数字超过限制,默认显示限制的最大值 ,所以就有了输入完图一自动变为图二的数字。 el-i…

unittest 统计测试执行case总数,成功数量,失败数量,输出至文件,生成一个简易的html报告带饼图

这是一个Python的单元测试框架的示例代码,主要用于执行测试用例并生成测试报告。其中,通过unittest模块创建主测试类MainTestCase,并加载其他文件中的测试用例,统计用例的执行结果并将结果写入文件,最后生成一个简单的…

记录一次校园CTF--wp

一.第一题简单nc 这题直接nc 地址端口即可得到flags没有套路 二.第二题pwn:ezstack 这是一题栈溢出题目,查看保护: 没有开启PIE,运行下查看效果: 题目是一个文字购物游戏。 接着扔进IDA中分析: 在主函数中我们找到…

macOS电池续航工具:Endurance中文

Endurance for Mac是一款强大而实用的电池管理和优化软件,专为MacBook设计。通过智能调整系统设置和管理后台应用,它能有效延长电池续航时间,提升工作和娱乐效率,成为你在各种场合下的得力助手。 Endurance for Mac软件的功能特色…

cordova Xcode打包ios以及发布流程(ionic3适用)

第一步 1、申请iOS证书 2、导入证书到钥匙串 第二步 1、xcode配置iOS证书 1.1用Xcode打开你的项目(我的Xcode版本是新版) 修改如下图 回到基本信息设置界面,Bundie 这项填写,最先创建的那个appid,跟创建iOS描述文件时选…

MySQL基础架构详解

概述 我们学习东西,都不应该是先去了解细节,而是应该窥其全貌,这样才能从高纬度去理解问题,同样我们学习mysql也是一样的,我们应该先了解整个mysql架构,及来龙去脉,才能更好的掌握它。下面我们开…

Mybatis-Plus使用Wrapper自定义SQL

文章目录 准备工作Mybatis-Plus使用Wrapper自定义SQL注意事项目录结构如下所示domain层Controller层Service层ServiceImplMapper层UserMapper.xml 结果如下所示:单表查询条件构造器单表查询,Mybatis-Plus使用Wrapper自定义SQL联表查询不用,My…

qt6:无法使用setFontColor

问题描述 跟着C开发指南视频学习,但是发现无论是直接使用ui设计,还是纯代码都无法实现变更字体颜色的功能。图中显示,点击颜色控件后,文本框的文字加粗、下划线、斜体等才能设置,但是无法变更颜色。 此文提醒qt sty…

基于驾驶训练算法的无人机航迹规划-附代码

基于驾驶训练算法的无人机航迹规划 文章目录 基于驾驶训练算法的无人机航迹规划1.驾驶训练搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用驾驶训练算法来优化无人机航迹规划。 …

『MySQL快速上手』-③-库的操作

文章目录 1.创建数据库2.创建数据库案例3.字符集和校验规则3.2 校验规则对数据库的影响3.2.1 进行查询3.2.2 进行排序 4.字符集和检验规则的作用5.操纵数据库5.1 查看数据库5.2 显示创建语句5.3 修改数据库5.4 数据库删除 6.备份与恢复6.1 备份6.2 还原6.3 注意事项 7.查看数据…

[量化投资-学习笔记007]Python+TDengine从零开始搭建量化分析平台-布林带

布林带(Bollinger Bands)也称为布林通道、保力加通道,是由约翰布林格(John Bollinger)发明的技术分析指标。布林通道通常被用来确认资产价格波动范围。 布林通道是由三条平滑的曲线组成的趋势线图表,中线为…

js原型链

什么叫原型链 原型链是js中的核心,原型链将各个属性链接起来,在原型链上面定义,原型链上的其他属性能够使用,原型链就是保证继承 原型链区分 原型链分为显式原型和隐式原型 显式原型:只有函数和构建函数才有显式原型…

CCF CSP认证 历年题目自练Day44

题目一 试题编号: 201612-3 试题名称: 权限查询 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述   授权 (authorization) 是各类业务系统不可缺少的组成部分,系统用户通过授权机制获得系统中各个…

[ACTF2020 新生赛]BackupFile 1

题目环境: 好好好,让找源文件是吧?咱们二话不说直接扫它后台 使用dirsearch工具扫描网站后台(博主有这个工具的压缩包,可以私聊我领取)python dirsearch.py -u http://0d418151-ebaf-4f26-86b2-5363ed16530…

01-基于IDEA,Spring官网,阿里云官网,手动四种方式创建SpringBoot工程

快速上手SpringBoot SpringBoot技术由Pivotal团队研发制作,功能的话简单概括就是加速Spring程序初始搭建过程和Spring程序的开发过程的开发 最基本的Spring程序至少有一个配置文件或配置类用来描述Spring的配置信息现在企业级开发使用Spring大部分情况下是做web开…

基于机器学习的 ICU 脑血管疾病死亡风险智能预测系统

温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 重症患者或重大手术后的患者在重症监护室(ICU)内通过多种生命支持系统以维持生理功能。患者在ICU 内会被频繁持续的记录生命体征和实验室测量等多种数据。由于高频…

为什么有了MAC地址,还需要IP地址?

解释 搞懂这个问题,首先需要了解交换机的功能 交换机内部有一张MAC地址映射表,记录着MAC地址和端口的对应关系。 如果A要给B发送一个数据包,构造如下格式的数据结构: 到达交换机时,交换机内部通过自己维护的 MAC 地…

b2b.ccb.com:443 需要你的凭据

忙活了一天,晚上回来准备查一下公户的最近的账单。因为昨天晚上熬夜重新做了电脑系统,就下载了建设银行的E路护航,一切安装就绪,准备进入企业网银时,被这些垃圾搞的系统及软件恶心到了,在此记录一下&#x…

Flutter利用GridView创建网格布局实现优美布局

文章目录 简介使用详解导入依赖项创建一个基本的 GridView一些参数说明使用GridView.count来构造 其他控制总结 简介 GridView 是 Flutter 中用于创建网格布局的强大小部件。它允许你在行和列中排列子小部件,非常适合显示大量项目,例如图像、文本、卡片…