2015-09-09 50 views
2

我需要從Oracle中的查詢計劃自動獲取hash_plan_value。 我知道我可以看到它,當我執行EXPLAIN PLAN爲「我的查詢」,然後 SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY())顯示我整個計劃。如何從PLAN_TABLE返回hash_plan_value?

但我的觀點是,我沒有在PLAN_TABLE的列中找到它。 例如,我可以使用SELECT COST,CARDINALITY,PLAN_TABLE中的字節有成本,CARDINALITY和BYTES有沒有辦法獲得PLAN_HASH_VALUE?我的意思是因爲它顯示在那裏,但我不知道在哪裏。 我希望我已經清楚了..

回答

1

計劃散列存儲在其中一個PLAN_TABLE行的OTHER_XML列中。

抽樣方案

explain plan set statement_id = 'TEST3' for select * from dual connect by level <= 10; 
select * from table(dbms_xplan.display); 

Plan hash value: 2874664061 

------------------------------------------------------------------------------------- 
| Id | Operation     | Name | Rows | Bytes | Cost (%CPU)| Time  | 
------------------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT    |  |  1 |  2 |  2 (0)| 00:00:01 | 
|* 1 | CONNECT BY WITHOUT FILTERING|  |  |  |   |   | 
| 2 | TABLE ACCESS FULL   | DUAL |  1 |  2 |  2 (0)| 00:00:01 | 
------------------------------------------------------------------------------------- 

Predicate Information (identified by operation id): 
--------------------------------------------------- 

    1 - filter(LEVEL<=10) 

查詢提取PLAN_HASH

select extractValue(xmltype(other_xml), '/other_xml/info[@type="plan_hash"]') plan_hash 
from plan_table 
where other_xml is not null 
    and statement_id = 'TEST3'; 

PLAN_HASH 
--------- 
2874664061 
+0

它的工作。非常感謝你! – user2804064