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如何查看执行计划的更多相关文章

  1. Oracle数据库查看执行计划

    基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分 ...

  2. ORACLE数据库查看执行计划的方法

    一.什么是执行计划(explain plan) 执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述. 二.如何查看执行计划 1: 在PL/SQL下按F5查看执行计划.第三方工具toad等 ...

  3. Oracle EBS 查看执行计划

    explain plan forSELECT MMT.TRANSACTION_ID,GIR.JE_HEADER_ID,GIR.JE_LINE_NUMFROM   GL_IMPORT_REFERENCE ...

  4. Oracle中获取执行计划的几种方法分析

    以下是对Oracle中获取执行计划的几种方法进行了详细的分析介绍,需要的朋友可以参考下     1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条S ...

  5. [terry笔记]oracle里的执行计划-查看

    内容主要来自看书学习的笔记,如下记录了常见查询执行计划的方法. 2.2 如何查看执行计划 1.explain plan 2.dbms_xplan包 3.autotrace 4.10046事件 5.10 ...

  6. oracle查看执行计划入门

    基于Oracle的应用系统很多的性能问题都是由应用系统的SQL性能低劣引起的,因此SQL的性能优化非常重要.要分析与优化SQL的性能,一般是通过查看该SQL的执行计划,然后通过执行计划有针对性地对SQ ...

  7. oracle执行计划(二)----如何查看执行计划

    目录: (一)六种执行计划  (1)explain plan for  (2)set autotrace on  (3)statistics_level=all  (4)dbms_xplan.disp ...

  8. oracle查看执行计划以及使用场景

    文档结构: oracle执行计划使用场景 环境: Centos 6.10 Oracle 18.3.0.0.0 c 11g默认启动了自动统计信息收集的任务,默认运行时间是周一到周五晚上10点和周6,周天 ...

  9. 转://看懂Oracle中的执行计划

    一.什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问路径的描述 二.怎样查看Oracle执行计划? 2.1 explain plan for命令查看执行计划 在sq ...

随机推荐

  1. Tomcat容器做到自我保护,设置最大连接数(服务限流:tomcat请求数限制)

    http://itindex.net/detail/58707-%E5%81%87%E6%AD%BB-tomcat-%E5%AE%B9%E5%99%A8 为了确保服务不会被过多的http长连接压垮,我 ...

  2. 解决java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone

    使用spring boot整合MySQL时一直报 java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecog ...

  3. python concurrent.futures.Threadpoolexcutor的有界队列和无界队列

    1.默认是无界队列,如果生产任务的速度大大超过消费的速度,则会把生产任务无限添加到无界队列中,这样一来控制不了生产速度,二来是会造成系统内存会被队列中的元素堆积增多而耗尽. 2.改写为有界队列 cla ...

  4. 【问题集】redis集群set报错(error) MOVED 11469 192.168.181.201:7002

    没有启动集群模式(即缺少了那个"-c"): redis-cli -c -h yourhost -p yourpost

  5. WPS 2019 多个sheet表拆分成独立的excel文件

    参考: https://www.cnblogs.com/hackxiyu/p/8945975.html 场景:将多个sheet表拆分成独立的excel文件 一.安装VB工具: 默认情况下:wps -- ...

  6. sonar-scanner的执行流程和对ClassLoader,动态代理的使用

    最近项目上使用了sonarqube来提供静态代码检查的服务,在看sonar-scanner的源码的时候,发现sonar-scanner用来分析的jar包是从sonar的服务器上下载下来的,使用自定义的 ...

  7. NIO相关概念之Buffer

    Buffer的定义: 概念上,缓冲区是包在一个对象内的基本数据元素数组.Buffer类相比一个简单数组的优点是它将关于数据的数据内容和信息包含在一个单一的对象中.Buffer类以及它专有的子类定义了一 ...

  8. day3 三、基本数据类型和运算符

    一.多行注释和单行注释 """ 多行注释 多行注释 多行注释 """ # 单行注释 # print('hello world') # pri ...

  9. .NET Core 中 IOptions 有什么用

    我只发现IOptions的一个用处——方便了在.NET Core应用程序中使用强类型配置. 如果没有IOptions,使用强类型配置需要自己解决下面2个问题: 1)将配置文件(比如appsetting ...

  10. POJ 1451 - T9 - [字典树]

    题目链接:http://bailian.openjudge.cn/practice/1451/ 总时间限制: 1000ms 内存限制: 65536kB 描述 Background A while ag ...