2014-06-06 84 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'));