dbms_xplan.display_cursor 获取执行过的sql的执行计划

转载 2013年12月04日 17:11:24

dbms_xplan.display_cursor 获取执行过的sql的执行计划

该函数的语法:
DBMS_XPLAN.DISPLAY_CURSOR(
   sql_id        IN VARCHAR2 DEFAULT NULL,
   child_number IN NUMBER    DEFAULT NULL,
   format        IN VARCHAR2 DEFAULT 'TYPICAL');

举个例子 执行一个简单查询:
SQL> select count(0) from cat_product cp,cat_drug cd where cp.medical_id=cd.id;

COUNT(0)
----------
    118908

如果我们想获取该语句的实际执行计划,通过下列步骤:

1、查询v$sql视图,找到该语句的sql_id(注意哟,必须要确保你要查询的sql语句还在shared pool):
SQL> select sql_id from v$sql where sql_text=
2 'select count(0) from cat_product cp,cat_drug cd where cp.medical_id=cd.id';

SQL_ID
-------------
c9cxqvr3q4tjd

2、调用dbms_xplan包,查看该语句执行时的实现执行计划:
SQL> select * from table(dbms_xplan.display_cursor('c9cxqvr3q4tjd'));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID c9cxqvr3q4tjd, child number 0
-------------------------------------
select count(0) from cat_product cp,cat_drug cd where cp.medical_id=cd.id

Plan hash value: 2559475106

-----------------------------------------------------------------------------------------------------------
| Id | Operation              | Name                     | Rows | Bytes |TempSpc| Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------------------------
......

事实上dbms_xplan.display_cursor也非常灵活,如果执行的统计信息也被收集的话,还可以显示出每一步实际的花费时间等信息,例如:

SQL> select /*+gather_plan_statistics*/ count(0) from cat_product cp,cat_drug cd where cp.medical_id=cd.id;

COUNT(0)
----------
    118908

--简单获取,不需要sqlid

select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'));

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID 91w1ug6vc9pxh, child number 0
-------------------------------------
select /*+gather_plan_statistics*/ count(0) from cat_product cp,cat_drug cd where cp.medical_id=cd.id

Plan hash value: 2559475106

-----------------------------------------------------------------------------------------------------------------------------------------------------
| Id | Operation              | Name                     | Starts | E-Rows |E-Bytes|E-Temp | Cost (%CPU)| E-Time   | A-Rows |   A-Time   | Buffers |
-----------------------------------------------------------------------------------------------------------------------------------------------------
...

查看已经执行过的sql的执行计划

有时候我们可能会希望查看一条已经执行过的sql的执行计划,常用的方式有两种:a,set autotrace后再重新执行一遍,不过重新执行可能会浪费时间,而且有些语句也不允许(例如修改操作的语句),或者...
  • beaning_zhang
  • beaning_zhang
  • 2015年08月04日 14:27
  • 478

Oracle如何查看SQL实际执行计划

select /*recentsql*/s.SQL_ID,s.CHILD_NUMBER,s.HASH_VALUE,s.ADDRESS,s.EXECUTIONS,s.SQL_TEXT from ...
  • yh_zeng2
  • yh_zeng2
  • 2017年08月01日 16:14
  • 347

查看PostgreSQL数据库中SQL语句的执行计划

查看PostgreSQL数据库中SQL语句的执行计划
  • msdnchina
  • msdnchina
  • 2017年03月09日 19:05
  • 716

最全的display_cursor执行计划查看使用方法

最全的display_cursor执行计划查看使用方法
  • f88520402
  • f88520402
  • 2015年01月31日 18:14
  • 1751

ORACLE数据库SQL优化--->如何得到真实的执行计划

在ORACLE数据库里通常可以使用如下的四种方法来得到目标SQL的执行计划: 1,EXPLAIN PLAN命令 2,DBMS_XPLAN包 3,SQLPLUS中的AUTOTRACE开关 4,10046...
  • waterxcfg304
  • waterxcfg304
  • 2014年02月18日 13:30
  • 6049

oracle查看sql执行计划和统计信息

--获取sql的执行计划以及统计信息,不显示查询信息  SQL> set autotrace traceonly; SQL> select * from test; 执行计划 ------------...
  • jlds123
  • jlds123
  • 2011年08月30日 11:16
  • 4712

SQL语句的执行计划和暗示

我真的感觉写SQL语句是锻炼智商的一个好方法. 当你用一条语句实现了一个复杂的功能.或通过一个小技巧让执行速度成百倍的提高时,那种感觉比嗑了药还爽.前几天才了解到SQL语句的执行计划这个东东.大概意思...
  • success_dream
  • success_dream
  • 2008年03月11日 14:55
  • 505

获取SQL执行计划的常见几种方法

*********************************************************** ----1:获取“刚刚”的执行计划display_cursor ******...
  • yangzhawen
  • yangzhawen
  • 2013年02月22日 16:48
  • 24659

获取执行计划的六种方法

1. explain planfor获取(类似plsql中的f5) Step1; explain plan for “sql” Step2: select * from table(dbms_xp...
  • gumengkai
  • gumengkai
  • 2017年03月05日 16:59
  • 1335

Oracle执行计划使用分析SQL执行效率

Oracle执行计划使用分析SQL执行效率
  • hephec
  • hephec
  • 2016年05月03日 20:12
  • 278
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:dbms_xplan.display_cursor 获取执行过的sql的执行计划
举报原因:
原因补充:

(最多只允许输入30个字)