案例:使用dbms_xplan.display_cursor无法获取执行计划

环境:RHEL 6.5 + Oracle 11.2.0.4

在一次测试中发现使用dbms_xplan.display_cursor无法获取到刚刚执行成功的SQL执行计划,现象如下:

  1. test@DEMO> select count(*) from t;
  2. COUNT(*)
  3. ----------
  4. 86391
  5. test@DEMO> @x
  6. PLAN_TABLE_OUTPUT
  7. ----------------------------------------------------------------------------------------------------
  8. SQL_ID 9babjv8yq8ru3, child number 1
  9. BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END;
  10. NOTE: cannot fetch plan for SQL_ID: 9babjv8yq8ru3, CHILD_NUMBER: 1
  11. Please verify value of SQL_ID and CHILD_NUMBER;
  12. It could also be that the plan is no longer in cursor cache (check v$sql_plan)
  13. 8 rows selected.
  14. test@DEMO> get x
  15. 1* select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

正常应该显示我刚执行的SQL执行计划,可结果却没有,且显然这个sql_id为9babjv8yq8ru3的语句不是我刚执行的,看到对应SQL文本中有DBMS_OUTPUT关键字,进而想到去看下serveroutput的设置,是不是有影响:

  1. test@DEMO> show serveroutput
  2. serveroutput ON SIZE 1000000 FORMAT WORD_WRAPPED
  3. test@DEMO> set serveroutput off
  4. test@DEMO> show serveroutput
  5. serveroutput OFF

可以看到serveroutput是开启的,正常默认情况应该是关闭,这里就先将其关闭后再试:

  1. test@DEMO> select count(*) from t;
  2. COUNT(*)
  3. ----------
  4. 86391
  5. test@DEMO> @x
  6. PLAN_TABLE_OUTPUT
  7. ----------------------------------------------------------------------------------------------------
  8. SQL_ID cyzznbykb509s, child number 1
  9. -------------------------------------
  10. select count(*) from t
  11. Plan hash value: 2966233522
  12. -------------------------------------------------------------------------------------
  13. | Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers |
  14. -------------------------------------------------------------------------------------
  15. | 0 | SELECT STATEMENT | | 1 | | 1 |00:00:00.05 | 1239 |
  16. | 1 | SORT AGGREGATE | | 1 | 1 | 1 |00:00:00.05 | 1239 |
  17. | 2 | TABLE ACCESS FULL| T | 1 | 73056 | 86391 |00:00:00.03 | 1239 |
  18. -------------------------------------------------------------------------------------
  19. Note
  20. -----
  21. - dynamic sampling used for this statement (level=2)
  22. 18 rows selected.

可以正常显示执行计划了,看来的确是serveroutput开启影响到我这样看执行计划了。

那么我操作过程中并没有开启serveroutput,而默认就应该是off的。这时候想到是不是sqlplus预定义的glogin.sql文件中有对应的设置?去查看发现果然如此,具体如下:

  1. cd $ORACLE_HOME/sqlplus/admin
  2. vi glogin.sql
  3. ...省略无关内容...
  4. set serveroutput on size 1000000
  5. ...省略无关内容...

如果近期工作经常需要这样查看执行计划,就把set serveroutput这一行配置注释或者删除即可。

案例:使用dbms_xplan.display_cursor无法获取执行计划的更多相关文章

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

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

  2. oracle获取执行计划及优缺点 详解

    一.获取执行计划的6种方法(详细步骤已经在每个例子的开头注释部分说明了):1. explain plan for获取: 2. set autotrace on : 3. statistics_leve ...

  3. dbms_xplan的display查看执行计划

    DBMS_XPLAN包包括一系列函数,主要是用于显示SQL语句的执行计划,且不同的情形下使用不同的函数来显示,如预估的执行计划则使用 display函数,而实际的执行计划则是用display_curs ...

  4. ORACLE 获取执行计划的方法

    一.获取执行计划的6种方法(详细步骤已经在每个例子的开头注释部分说明了): 1. explain plan for获取: 2. set autotrace on : 3. statistics_lev ...

  5. 获取执行计划——EXPLAN PLAN

    一般获取执行计划有四种途径:1.执行explain plan,查询结果输出表.2.查询动态性能视图,它显示缓存在库缓存中的执行计划(有时查不出结果是因为执行计划已经不在库缓存中).3.查询AWR或St ...

  6. 性能测试四十一:sql案例之慢sql配置、执行计划和索引

    MYSQL 慢查询使用方法MYSQL慢查询介绍分析MySQL语句查询性能的问题时候,可以在MySQL记录中查询超过指定时间的语句,我们将超过指定时间的SQL语句查询称为“慢查询”.MYSQL自带的慢查 ...

  7. oracle中获取执行计划

    1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条SQL语句的执行计划,并将执行计划输出存储到计划表中. 首先,在你要执行的SQL语句前加expla ...

  8. xplan.sql(本脚本获取执行计划显示执行顺序)

    -- ---------------------------------------------------------------------------------------------- -- ...

  9. 获取执行计划之Autotrace

    Autotrace 简介 AUTOTRACE是一项SQL*Plus功能,自动跟踪为SQL语句生成一个执行计划并且提供与该语句的处理有关的统计. AUTOTRACE的好处是您不必设置跟踪文件的格式,并且 ...

随机推荐

  1. 【Java必修课】图说Stream中的skip()和limit()方法及组合使用

    1 简介 本文将讲解Java 8 Stream中的两个方法:skip()和limit().这两个方法是Stream很常用的,不仅各自会被高频使用,还可以组合出现,并能实现一些小功能,如subList和 ...

  2. WebGPU学习系列目录

    介绍 大家好,本系列从0开始学习WebGPU API,并给出相关的demo. WebGPU介绍 WebGPU相当于DX12/Vulkan,能让程序员更灵活地操作GPU,从而大幅提升性能. 为什么要学习 ...

  3. crontab 定时任务没有响应 检测步骤

    设置规则 # 每分钟执行一次 */1 * * * * /scripts/script.sh # 每小时执行一次 0 */1 * * * /scripts/script.sh # 每天 02:00 执行 ...

  4. 精通awk系列(16):gawk支持的正则表达式

    回到: Linux系列文章 Shell系列文章 Awk系列文章 gawk支持的正则 . # 匹配任意字符,包括换行符 ^ $ [...] [^...] | + * ? () {m} {m,} {m,n ...

  5. python集合和eval的使用

    python集合和eval的使用 创建集合 使用工厂方法 set()和 frozenset(): >>> s = set('cheeseshop') >>> s s ...

  6. Java题库——Chapter16 JavaFX UI组件和多媒体

    Chapter 16 JavaFX UI Controls and Multimedia Section 16.2 Labeled and Label1. To create a label with ...

  7. 初窥R(基本说明、获取帮助、工作空间、输入输出、包)

    本篇简要介绍使用R的一些基本概念,包括基本说明.获取帮助.工作空间.输入输出,每个知识点中都会通过一个例子来练习. 一.R基本情况说明 1.R是一种区分大小写的解释性语言. 2.控制台默认使用命令提示 ...

  8. WPF应用中对WindowsFormHost内容进行裁剪

    问题1:  WPF中在使用WindowsFormsHost调用WinFrom控件时,若在WindowsFormsHost上层添加了WPF控件,该控件不会显示出来. <Grid> <W ...

  9. Git实战指南----跟着haibiscuit学Git(第九篇)

    笔名:  haibiscuit 博客园: https://www.cnblogs.com/haibiscuit/ Git地址: https://github.com/haibiscuit?tab=re ...

  10. Java中"或"运算与"与"运算快慢的三三两两

    先上结论 模运算比与运算慢20%到30% 这是通过实验的方式得到的结论.因为没有大大可以进行明确指导,所以我以最终运行的结果为准.欢迎指正. 测试代码 @Test public void test10 ...