2014-06-06 129 views
0

我想看看Oracle中的執行計劃。我嘗試這樣做:與Oracle解釋計劃

select /*+ gather_plan_statistics */ /*test4*/ * from tag 
where key='name'; 

SELECT t.* 
FROM v$sql s, table(DBMS_XPLAN.DISPLAY_CURSOR(s.sql_id, s.child_number, 'TYPICAL PROJECTION')) t WHERE sql_text LIKE '%test4%'; 

結果是:

| Id | Operation   | Name | Rows | Bytes | Cost (%CPU)| Time  | 
-------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT |  |  |  | 22 (100)|   | 
|* 1 | TABLE ACCESS FULL| TAG | 14 | 714 | 22 (0)| 00:00:01 | 

我的問題是,該行是不正確的,也有3019行與主要=「名」。 這是一個估計值。

我的問題是,我怎麼才能得到真正的價值?

謝謝,安德烈

+0

請永遠過去完整的執行計劃;不只是片段。由於優化程序僅估計了14行,因此您的統計信息可能不是最新的。所以運行dbms_stats.gather_table_stats(user,'TAG'); – BobC

回答

1

在SQL * Plus中,您可以使用AUTOTRACE功能。

查看here舉例。

+0

我設置了自動跟蹤,並嘗試跟蹤自動跟蹤選項,但它沒有改變一件事情。 – Andre

+0

我使用sql-Developer – Andre

0

我嘗試這樣做:

select id from tag; 
select * from table(dbms_xplan.display_cursor(format => 'ALLSTATS LAST')); 

,但它給了我不屬於最後一條語句的執行計劃:

SQL_ID gypnfv5nzurb0, child number 0 
------------------------------------- 
select child_number from v$sql where sql_id = :1  order by 
child_number 

Plan hash value: 4252345203 

-------------------------------------------------------------------------------------------------- 
| Id | Operation    | Name      | E-Rows | OMem | 1Mem | Used-Mem | 
-------------------------------------------------------------------------------------------------- 
| 0 | SELECT STATEMENT   |       |  |  |  |   | 
| 1 | SORT ORDER BY   |       |  1 | 2048 | 2048 | 2048 (0)| 
|* 2 | FIXED TABLE FIXED INDEX| X$KGLCURSOR_CHILD (ind:2) |  1 |  |  |   | 
-------------------------------------------------------------------------------------------------- 

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

    2 - filter(("KGLOBT03"=:1 AND INTERNAL_FUNCTION("CON_ID") AND 
       "INST_ID"=USERENV('INSTANCE'))) 

Note 
----- 
    - Warning: basic plan statistics not available. These are only collected when: 
     * hint 'gather_plan_statistics' is used for the statement or 
     * parameter 'statistics_level' is set to 'ALL', at session or system level 

這是一個明顯問題我沒有得到:(

0

做到這一點:

alter session set statistics_level=ALL; 

然後運行:

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