获取已执行语句的执行计划


曾经都是写脚本到数据字典v$sql_plan里面去取,Christian Antognini却提供了更好的办法。

(1)在Oracle 10g中,使用dbms_xplan.display_cursor传递sql_id和子游标child_number参数即可获得。

JCQ0> SELECT * FROM table(dbms_xplan.display_cursor('1hqjydsjbvmwq',0));
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------
SQL_ID 1hqjydsjbvmwq, child number 0
-------------------------------------
SELECT SUM(AMOUNT_SOLD) FROM SALES S, PROMOTIONS P WHERE S.PROMO_ID =
P.PROMO_ID AND PROMO_SUBCATEGORY = 'online discount'
Plan hash value: 265338492
------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 517 (100)| |
| 1 | SORT AGGREGATE | | 1 | 30 | | |
|* 2 | HASH JOIN | | 913K| 26M| 517 (4)| 00:00:07 |
|* 3 | TABLE ACCESS FULL | PROMOTIONS | 23 | 483 | 17 (0)| 00:00:01 |
| 4 | PARTITION RANGE ALL| | 918K| 8075K| 494 (3)| 00:00:06 |
| 5 | TABLE ACCESS FULL | SALES | 918K| 8075K| 494 (3)| 00:00:06 |
------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("S"."PROMO_ID"="P"."PROMO_ID")
3 - filter("PROMO_SUBCATEGORY"='online discount')

(2)在Oracle 9i中,将v$sql_plan中的信息插入plan_table也可以得到格式化好的执行计划。

JCQ0> SELECT address, hash_value, child_number, sql_text
2 FROM v$sql
3 WHERE sql_text LIKE '%online discount%' AND sql_text NOT LIKE '%v$sql%';
ADDRESS HASH_VALUE CHILD_NUMBER SQL_TEXT
---------------- ---------- ------------ -------------------------------------
0000000055DCD888 4132422484 0 SELECT sum(amount_sold) FROM sales s,
promotions p WHERE s.promo_id =
p.promo_id AND promo_subcategory =
'online discount'
JCQ0> DELETE plan_table;
JCQ0> INSERT INTO plan_table (operation, options, object_node, object_owner,
2 object_name, optimizer, search_columns, id,
3 parent_id, position, cost, cardinality, bytes,
4 other_tag, partition_start, partition_stop,
5 partition_id, other, distribution, cpu_cost,
6 io_cost, temp_space, access_predicates,
7 filter_predicates)
8 SELECT operation, options, object_node, object_owner, object_name,
9 optimizer, search_columns, id, parent_id, position, cost,
10 cardinality, bytes, other_tag, partition_start, partition_stop,
11 partition_id, other, distribution, cpu_cost, io_cost, temp_space,
12 access_predicates, filter_predicates
13 FROM v$sql_plan
14 WHERE address = '0000000055DCD888'
15 AND hash_value = 4132422484
16 AND child_number = 0;
JCQ0> SELECT * FROM table(dbms_xplan.display);
PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | |
| 1 | SORT AGGREGATE | | 1 | 29 | |
|* 2 | HASH JOIN | | 64482 | 1826K| 426 (24)|
|* 3 | TABLE ACCESS FULL | PROMOTIONS | 24 | 504 | 4 (25)|
| 4 | PARTITION RANGE ALL| | | | |
| 5 | TABLE ACCESS FULL | SALES | 1016K| 7939K| 398 (19)|
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access("PROMO_ID"="PROMO_ID")
3 - filter("PROMO_SUBCATEGORY"='online discount')

-----------------------------------------------------------------------------------------------------

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14130873/viewspace-625399/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14130873/viewspace-625399/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值