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 |
-----------------------------------------------------------------------------------------------------------------------------------------------------
...

dbms_xplan.display_cursor 查看已执行SQL的执行计划(10g后)

dbms_xplan.display_cursor 查看已执行SQL的执行计划(10g后)

dbms_xplan.display_cursor查看低效的执行计划

dbms_xplan.display_cursor定义: function display_cursor(sql_id                                 varch...

通过dbms_xplan.display_cursor识别低效的执行计划

识别问题sql我们可以通过以下几种方式获得: 1. AWR 2. ASH 3. 根据当时占用CPU高的进程查找对应的sql 问题sql找到了,接着我们要看sql的执行计划,但问题是如果快速找到...

dbms_xplan.display_awr方式获取执行计划的实验和之前的误导

《查看Oracle执行计划的几种常用方法-系列1》(http://blog.csdn.net/bisal/article/details/38919181)这篇博文中曾提到一个隐藏问题: “隐藏问题...
  • bisal
  • bisal
  • 2014年10月28日 13:33
  • 4439

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

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

dbms_xplan之display_cursor函数的使用

DBMS_XPLAN包中display_cursor函数不同于display函数,display_cursor用于显示SQL语句的真实的执行计划,在大多数情况下,显示真实 的执行计划有助于更好的分析...

巧用DISPLAY_AWR函数与dba_hist_sqlstat结合查询SQL语句在指定节点指定时间范围内的历史执行计划

巧用DISPLAY_AWR函数与dba_hist_sqlstat结合查询SQL语句在指定节点指定时间范围内的历史执行计划 (查询SQL语句在指定节点指定时间段的执行计划)...

dbms_spm之baseline FIXED=YES使用陷阱(执行计划不通用),严重影响系统;

--aiki下创建一实体表T1 SQL> create table t1 as select * from dba_objects where object_id is not null; Tabl...

ORACLE执行计划和SQL调优

  • 2013年10月17日 15:12
  • 164KB
  • 下载

SQL执行计划实验

  • 2014年05月23日 20:00
  • 104KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:dbms_xplan.display_cursor 获取执行过的sql的执行计划
举报原因:
原因补充:

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