查看: 5826|回复: 14

使用dbms_xplan.display_cursor查看执行计划的问题

[复制链接]
论坛徽章:
8
蜘蛛蛋
日期:2013-02-21 09:06:42迷宫蛋
日期:2013-05-25 21:05:58马自达
日期:2013-10-24 17:08:46兰博基尼
日期:2013-11-17 21:05:35现代
日期:2013-11-22 11:21:53福特
日期:2014-01-28 21:36:132014年新春福章
日期:2014-02-18 16:49:31马上有钱
日期:2014-02-18 16:49:31
发表于 2012-12-18 17:00 | 显示全部楼层 |阅读模式
  1. SQL> set serveroutput off;
  2. SQL> select /*+ gather_plan_statistics */ * from emp;

  3. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
  4. ----- ---------- --------- ----- ----------- --------- --------- ------
  5. 7369 SMITH      CLERK      7902 1980/12/17     800.00               20
  6. 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
  7. 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
  8. 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
  9. 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30
  10. 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
  11. 7782 CLARK      MANAGER    7839 1981/6/9      2550.00               10
  12. 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
  13. 7839 KING       PRESIDENT       1981/11/17    5100.00               10
  14. 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
  15. 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20
  16. 7900 JAMES      CLERK      7698 1981/12/3      950.00               30
  17. 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
  18. 7934 MILLER     CLERK      7782 1982/1/23     1400.00               10

  19. 14 rows selected

  20. SQL> select * from table(dbms_xplan.display_cursor(null, null, 'allstats last'));

  21. PLAN_TABLE_OUTPUT
  22. --------------------------------------------------------------------------------
  23. SQL_ID  9m7787camwh4m, child number 0
  24. begin :id := sys.dbms_transaction.local_transaction_id; end;
  25. NOTE: cannot fetch plan for SQL_ID: 9m7787camwh4m, CHILD_NUMBER: 0
  26.       Please verify value of SQL_ID and CHILD_NUMBER;
  27.       It could also be that the plan is no longer in cursor cache (check v$sql_p

  28. 8 rows selected
复制代码

貌似 set serveroutput off 没执行,这个该怎么解决?
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2012-12-18 17:27 来自手机 | 显示全部楼层
加explain plan for .....

使用道具 举报

回复
论坛徽章:
126
ITPUB元老
日期:2007-07-04 17:27:50会员2007贡献徽章
日期:2007-09-26 18:42:10现任管理团队成员
日期:2011-05-07 01:45:08优秀写手
日期:2015-01-09 06:00:14版主7段
日期:2015-07-16 02:10:00
发表于 2012-12-18 17:29 来自手机 | 显示全部楼层
先执行explain plan for select * from emp, 后在运行你那条语句即可

使用道具 举报

回复
论坛徽章:
8
蜘蛛蛋
日期:2013-02-21 09:06:42迷宫蛋
日期:2013-05-25 21:05:58马自达
日期:2013-10-24 17:08:46兰博基尼
日期:2013-11-17 21:05:35现代
日期:2013-11-22 11:21:53福特
日期:2014-01-28 21:36:132014年新春福章
日期:2014-02-18 16:49:31马上有钱
日期:2014-02-18 16:49:31
 楼主| 发表于 2012-12-18 17:59 | 显示全部楼层
bell6248 发表于 2012-12-18 17:29
先执行explain plan for select * from emp, 后在运行你那条语句即可

explain plan for 查看解释执行计划,这里是想看实际的执行计划啊,explain plan for 没问题的,就是用
dbms_xplan.display_cursor()时关于serveroutput 的问题~

使用道具 举报

回复
论坛徽章:
51
ITPUB十周年纪念徽章
日期:2011-11-01 16:25:22铁扇公主
日期:2012-02-21 15:03:13最佳人气徽章
日期:2012-03-13 17:39:18ITPUB季度 技术新星
日期:2012-05-22 15:10:11ITPUB 11周年纪念徽章
日期:2012-10-09 18:13:332013年新春福章
日期:2013-02-25 14:51:24ITPUB社区12周年站庆徽章
日期:2013-08-12 09:34:36itpub13周年纪念徽章
日期:2014-09-28 10:55:55
发表于 2012-12-18 18:16 | 显示全部楼层
星空下wjr 发表于 2012-12-18 17:59
explain plan for 查看解释执行计划,这里是想看实际的执行计划啊,explain plan for 没问题的,就是用
...


  你的环境是?

SQL> select /*+ gather_plan_statistics */ * from emp;
     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- --------------- ----- ----------
DEPTNO
------
      7369 SMITH      CLERK           7902 17-DEC-80         222
    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81         222        300
    30
      7521 WARD       SALESMAN        7698 22-FEB-81        1250        500
    30

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- --------------- ----- ----------
DEPTNO
------
      7566 JONES      MANAGER         7839 02-APR-81        2975
    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81        1250       1400
    30
      7698 BLAKE      MANAGER         7839 01-MAY-81        2850
    30

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- --------------- ----- ----------
DEPTNO
------
      7782 CLARK      MANAGER         7839 09-JUN-81        2450
    10
      7788 SCOTT      ANALYST         7566 19-APR-87        3000
    20
      7839 KING       PRESIDENT            17-NOV-81        5000
    10

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- --------------- ----- ----------
DEPTNO
------
      7844 TURNER     SALESMAN        7698 08-SEP-81        1500          0
    30
      7876 ADAMS      CLERK           7788 23-MAY-87        1100
    20
      7900 JAMES      CLERK           7698 03-DEC-81         950
    30

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM
---------- ---------- --------- ---------- --------------- ----- ----------
DEPTNO
------
      7902 FORD       ANALYST         7566 03-DEC-81        3000
    20
      7934 MILLER     CLERK           7782 23-JAN-82        1260
    10

14 rows selected.
SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  fjhbyrfs7gygq, child number 0
-------------------------------------
select /*+ gather_plan_statistics */ * from emp
Plan hash value: 3956160932
--------------------------------------------------------------------------------
----
| Id  | Operation         | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffe
rs |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
----
|   1 |  TABLE ACCESS FULL| EMP  |      1 |     14 |     14 |00:00:00.01 |
8 |
--------------------------------------------------------------------------------
----

使用道具 举报

回复
论坛徽章:
8
蜘蛛蛋
日期:2013-02-21 09:06:42迷宫蛋
日期:2013-05-25 21:05:58马自达
日期:2013-10-24 17:08:46兰博基尼
日期:2013-11-17 21:05:35现代
日期:2013-11-22 11:21:53福特
日期:2014-01-28 21:36:132014年新春福章
日期:2014-02-18 16:49:31马上有钱
日期:2014-02-18 16:49:31
 楼主| 发表于 2012-12-18 18:19 | 显示全部楼层
iori809 发表于 2012-12-18 18:16
你的环境是?

SQL> select /*+ gather_plan_statistics */ * from emp;

oracle是10.2.0,在pl/sql dev上跑的

使用道具 举报

回复
论坛徽章:
102
现任管理团队成员
日期:2011-05-07 01:45:08ITPUB十周年纪念徽章
日期:2012-11-26 16:33:25慢羊羊
日期:2015-03-04 14:19:442015年新春福章
日期:2015-03-06 11:57:312016猴年福章
日期:2016-02-23 09:58:34
发表于 2012-12-19 09:23 | 显示全部楼层
把9m7787camwh4m作为dbms_xplan.display_cursor第一个参数去运行看看

使用道具 举报

回复
论坛徽章:
8
蜘蛛蛋
日期:2013-02-21 09:06:42迷宫蛋
日期:2013-05-25 21:05:58马自达
日期:2013-10-24 17:08:46兰博基尼
日期:2013-11-17 21:05:35现代
日期:2013-11-22 11:21:53福特
日期:2014-01-28 21:36:132014年新春福章
日期:2014-02-18 16:49:31马上有钱
日期:2014-02-18 16:49:31
 楼主| 发表于 2012-12-19 09:49 | 显示全部楼层
horizon 发表于 2012-12-19 09:23
把9m7787camwh4m作为dbms_xplan.display_cursor第一个参数去运行看看
  1. SQL> select * from table(dbms_xplan.display_cursor('9m7787camwh4m', 0, 'allstats last'));

  2. PLAN_TABLE_OUTPUT
  3. --------------------------------------------------------------------------------
  4. SQL_ID  9m7787camwh4m, child number 0
  5. begin :id := sys.dbms_transaction.local_transaction_id; end;
  6. NOTE: cannot fetch plan for SQL_ID: 9m7787camwh4m, CHILD_NUMBER: 0
  7.       Please verify value of SQL_ID and CHILD_NUMBER;
  8.       It could also be that the plan is no longer in cursor cache (check v$sql_p

  9. 8 rows selected
复制代码
还是一样啊、、、

使用道具 举报

回复
论坛徽章:
8
蜘蛛蛋
日期:2013-02-21 09:06:42迷宫蛋
日期:2013-05-25 21:05:58马自达
日期:2013-10-24 17:08:46兰博基尼
日期:2013-11-17 21:05:35现代
日期:2013-11-22 11:21:53福特
日期:2014-01-28 21:36:132014年新春福章
日期:2014-02-18 16:49:31马上有钱
日期:2014-02-18 16:49:31
 楼主| 发表于 2012-12-19 10:00 | 显示全部楼层
还是不行、、不过可以先标识sql,然后再v$sql里面去取sql_id和child_number,然后再用dbms_xplan.display_cursor()就ok了~
不知道啥原因。。。
  1. SQL> select /* test *//*+ gather_plan_statistics */ * from emp;

  2. EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
  3. ----- ---------- --------- ----- ----------- --------- --------- ------
  4. 7369 SMITH      CLERK      7902 1980/12/17     800.00               20
  5. 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
  6. 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
  7. 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
  8. 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30
  9. 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
  10. 7782 CLARK      MANAGER    7839 1981/6/9      2550.00               10
  11. 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
  12. 7839 KING       PRESIDENT       1981/11/17    5100.00               10
  13. 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
  14. 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20
  15. 7900 JAMES      CLERK      7698 1981/12/3      950.00               30
  16. 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
  17. 7934 MILLER     CLERK      7782 1982/1/23     1400.00               10

  18. 14 rows selected

  19. SQL> select sql_id, child_number, sql_text from v$sql where sql_text like '%test%';

  20. SQL_ID        CHILD_NUMBER SQL_TEXT
  21. ------------- ------------ --------------------------------------------------------------------------------
  22. 0200bsvkhc917            0 select wrm.last_ash_sample_id from   WRM$_DATABASE_INSTANCE wrm,        (select
  23. 5ms1dhxbadq64            0 update wrm$_snapshot set status = 0,      flush_elapsed =         greatest((cast
  24. 2hqz4n3062jhq            0 select /* test *//*+ gather_plan_statistics */ * from emp
  25. cptm0vuy03d5g            0 select sql_id, child_number, sql_text from v$sql where sql_text like '%test%'

  26. SQL> select * from table(dbms_xplan.display_cursor('2hqz4n3062jhq', 0, 'allstats last'));

  27. PLAN_TABLE_OUTPUT
  28. --------------------------------------------------------------------------------
  29. SQL_ID  2hqz4n3062jhq, child number 0
  30. -------------------------------------
  31. select /* test *//*+ gather_plan_statistics */ * from emp
  32. Plan hash value: 3956160932
  33. --------------------------------------------------------------------------------
  34. | Id  | Operation         | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffe
  35. --------------------------------------------------------------------------------
  36. |   1 |  TABLE ACCESS FULL| EMP  |      1 |     14 |     14 |00:00:00.01 |
  37. --------------------------------------------------------------------------------

  38. 12 rows selected
复制代码

使用道具 举报

回复
论坛徽章:
15
嫦娥
日期:2015-07-24 15:04:18天枰座
日期:2016-04-25 21:01:43秀才
日期:2016-03-01 09:57:08双子座
日期:2016-02-05 15:31:24秀才
日期:2015-11-23 10:00:44秀才
日期:2015-11-11 09:48:44秀才
日期:2015-10-30 10:04:49秀才
日期:2015-10-19 15:49:55秀才
日期:2015-10-10 11:14:21秀才
日期:2015-10-08 17:57:58
发表于 2015-7-5 22:01 | 显示全部楼层
我的也是这样,不过重启一下机器就可以了,暂时不知道是啥原因

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年6月4日~6日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表