oracle如何查看执行计划
1.在PL/SQL Developer中得到一个SQL的执行计划
输入想要查看执行计划的目标SQL,再按一下快捷键F5就可以了。
2.explain plan 命令
explain plan for + 目标SQL
select * from table(dbms_xplan.display)
3. DBMS_XPLAN 包
1) select * from table(dbms_xplan.display_cursor(null,null,'advanced'))
它用于在SQLPLUS中查看刚刚执行过的SQL的执行计划。这里所传入的第一个和第二个参数的值均为null,第三个参数的值是 advanced,
第三个输入参数的值也可以是 all,只不过用 advanced 后的显示结果会比用 all 的显示结果更详细一些。
2) select * from table(dbms_xplan.display_cursor('sql_id/hash_value',child_cursor_number,'advanced'))
它用于查看指定SQL的执行计划。这里所传入的第一个参数的值是指定SQL的SQL ID 或者 SQL HASH VALUE,第二个参数的值是要查看的
执行计划所在的Child Cursor Number,第三个参数和上边的介绍一样,我们一般都是用 advanced
只要目标SQL所对应的Child Cursor还在Library Cache中,我们就可以从 V$SQL 中查询到目标SQL的Child Cursor的详细信息,包括
SQL ID、SQL HASH VALUE、Child Cursor Number等。
select sql_text,sql_id,hash_value,child_number from v$sql where sql_text like 'SQL目标语句';
只要目标SQL的执行计划所在的Child Cursor还没有被age out 出 Shared Pool,就可以使用该方法来查看该SQL的执行计划。
3) select * from table(dbms_xplan.display_awr('sql_id'))
它用于查看指定SQL的所有历史执行计划。使用方法1),2)能够显示目标SQL执行计划的前提是该SQL的执行计划还在Shared Pool中,而如果
该SQL的执行计划已经被 age out 出 Shared Pool,那么只要该SQL的执行计划被Oracle采集到AWR Repository中,我们就可以使用该方法来查
看该SQL的所有历史执行计划。
手工采集AWR报告的方法:exec dbms_workload_repository.create_snapshot();
查看目标SQL的执行计划是否被 age out 出 Shared Pool: select sql_text,sql_id,version_count,executions from v$sqlarea where
sql_text like '目标SQL';
清空Shared Pool:alter system flush shared_pool;(请勿随意在生产环境执行此语句)
4. AUTOTRACE 开关
set autotrace [off | on | traceonly]
1) 在SQLPLUS的当前Session中执行命令 set autotrace on, 可以在当前Session中将autotrace开关完全打开。这样,在这个Session中随后
执行的所有SQL语句,除了显示SQL执行结果之外,还会额外显示这些SQL所对应的执行计划和资源消耗情况。
2) 在SQLPLUS的当前Session中执行命令 set autotrace off, 可以在当前Session中将autotrace开关关闭,这样,在这个Session中随后执行
的所有SQL都只会显示SQL执行结果。autotrace开关的默认值是off.
3) 在SQLPLUS的当前Session中执行命令 set autotrace traceonly, 可以在当前Session中将autotrace开关以不显示SQL执行结果的具体内容
的方式打开。适用于那些SQL执行结果的具体内容特别长,会连续刷屏的SQL, 这种情况下我们不关心SQL的执行结果,而只是关系SQL的执行计划
和资源消耗量。
5. 10046事件与 tkprof命令(得到的执行计划最准确)
这种方法可以得到执行计划中每一个执行步骤所消耗的逻辑读、物理读和花费的时间。
1) oradebug setmypid
表示准备对当前Session使用oradebug命令。
2) oradebug event 10046 trace name context forever,level 12
在当前Session中激活10046事件。
3) 执行目标SQL
4) oradebug tracefile_name
显示当前Session激活10046事件后所对应的trace文件的路径和名称。
5) oradebug event 10046 trace name context off
在当前Session中关闭10046事件。
6) tkprof trace文件绝对路径 翻译后目标文件的绝对路径
使用tkprof命令翻译trace文件,使结果更直观。
6.(得到真实的、准确的执行计划) 如果目标SQL的执行计划还在Shared Pool中,可以使用脚本display_cursor-9i.sql和存储过程printsql来得到其真实的执行计划和资源消耗情况。如果目标SQL的执行计划已经被age out 出 Shared Pool了,我们可以执行DBMS_XPLAN.DISPLAY_AWR 或者使用 AWR SQL 报告和 Statspack SQL 报告来得到其历史执行计划和资源消耗。
1) display_cursor_9i.sql的用法(适用于Oracle 9i 及其以后的数据库版本)
在执行脚本时,传入待查看执行计划的目标SQL的SQL HASH VALUE 和 Child Cursor Number
a. 执行目标SQL
b. 查询HASH_VALUE 和 Child Number
select sql_text,hash_value,child_number from v$sql where sql_text like '目标SQL';
c. 执行脚本
@脚本 HASH_VALUE CHILD_NUMBER
2) printsql的用法(适用于9i/10g/11g)
存储过程printsql是在脚本display_cursor_9i.sql上的封装,它可以把指定SPID或者Session ID的进程或者Session 正在执行的SQL以及其对应的真实执行计划、资源消耗情况打印出来。
a. 执行 topas
得到oracle的PID
b. set serveroutput on size 1000000
c. exec printsql(PID,'SPID')
注释:PID是a查询出来的PID,'SPID'原样输入。
3) 获取AWR SQL 报告(10g及其以后的版本)
手工执行脚本 $ORACLE_HOME/rdbms/admin/awrsqrpt.sql,并依此输入报告类型(text/html)、要查看的快照范围(最近几天内的快照)、目标SQL ID和所要生产的AWR SQL 报告的名称。
4) 获取Statspack SQL 报告(9i)
手工执行脚本 $ORACLE_HOME/rdbms/admin/sprepsql,并依此输入要查看的快照的范围、目标SQL HASH VALUE 和所要生成的Statspack SQL报告的名称。
注释:事先已经部署了Statspack报告,并且采集Statspack报告的level值大于等于6(Statspack 报告level的默认值是5)
7.如何查看执行计划的执行顺序
先从最开头一直连续往右看,直到看到最右边的并列的地方;对于不并列的,靠右的先执行;如果见到并列的,从上往下看,对于并列的部分,靠上的先执行。
oracle如何查看执行计划的更多相关文章
- Oracle数据库查看执行计划
基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分 ...
- ORACLE数据库查看执行计划的方法
一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等 ...
- Oracle EBS 查看执行计划
explain plan forSELECT MMT.TRANSACTION_ID,GIR.JE_HEADER_ID,GIR.JE_LINE_NUMFROM GL_IMPORT_REFERENCE ...
- Oracle中获取执行计划的几种方法分析
以下是对Oracle中获取执行计划的几种方法进行了详细的分析介绍,需要的朋友可以参考下 1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条S ...
- [terry笔记]oracle里的执行计划-查看
内容主要来自看书学习的笔记,如下记录了常见查询执行计划的方法. 2.2 如何查看执行计划 1.explain plan 2.dbms_xplan包 3.autotrace 4.10046事件 5.10 ...
- oracle查看执行计划入门
基于Oracle的应用系统很多的性能问题都是由应用系统的SQL性能低劣引起的,因此SQL的性能优化非常重要.要分析与优化SQL的性能,一般是通过查看该SQL的执行计划,然后通过执行计划有针对性地对SQ ...
- oracle执行计划(二)----如何查看执行计划
目录: (一)六种执行计划 (1)explain plan for (2)set autotrace on (3)statistics_level=all (4)dbms_xplan.disp ...
- oracle查看执行计划以及使用场景
文档结构: oracle执行计划使用场景 环境: Centos 6.10 Oracle 18.3.0.0.0 c 11g默认启动了自动统计信息收集的任务,默认运行时间是周一到周五晚上10点和周6,周天 ...
- 转://看懂Oracle中的执行计划
一.什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二.怎样查看Oracle执行计划? 2.1 explain plan for命令查看执行计划 在sq ...
随机推荐
- 关于Unity中NGUI的Pivot和锚点
Pivot 1.创建一个Sprite类型的Sprite1节点,关联一个图集和一张贴图,用图中的六个按钮调整这个贴图的Pivot点,一共有八个点可以选择 2.再创建一个Sprite类型的Sprite2节 ...
- Java8学习笔记(六)--Optional
前言 身为一名Java程序员,大家可能都有这样的经历:调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法.我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的 ...
- last
last reboot 显示系统最后重启的历史记录 last -w 显示自系统启动以来,所有登录的用户(全名)
- 【代码审计】YzmCMS_PHP_v3.6 任意文件删除漏洞分析
0x00 环境准备 YzmCMS官网:http://www.yzmcms.com/ 程序源码下载:http://pan.baidu.com/s/1pKA4u99 测试网站首页: 0x01 代码分析 ...
- 4G通信模块在ARM平台下的应用
4G模块是连接物与物的重要载体,是终端设备接入物联网的核心部件之一.随着4G的普及,许多新兴市场对4G通信模块的需求都在日益扩大,那么在ARM平台的嵌入式设备上如何快速的应用4G模块呢? 4G通信模块 ...
- C语言程序设计--执行命令
1.system函数 1.1函数原型 int system(char *command); 1.2解释 system()会调用fork()产生子进程,由子进程来调用/bin/sh -c string来 ...
- 基于VS Code创建Java command-line app
由于国产化的原因,公司由.NET转向了Java阵营,之后会不定期分享一些技术转型中的体会.所谓Java的command-line app其实就是.NET项目中的Console Application, ...
- isinstance函数
isinstance isinstance(object, classinfo) 判断实例是否是这个类或者object是变量 classinfo 是类型(tuple,dict,int,float,bo ...
- J - Romantic
The Sky is Sprite. The Birds is Fly in the Sky. The Wind is Wonderful. Blew Throw the Trees Trees ar ...
- java内存溢出总结(1.8)
堆溢出 原因:老年代没有足够的空间存放即将进入老年代对象(或者没有连续的空间存下某个大对象),1.多次gc没有回收的对象 2. ygc后,s区满了,多余的对象直接进入老年代,3.大对象直接进入老年代 ...