2014-06-06 2 views
0

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 개 행이 정확하지 않은 것입니다. 이것은 예상 값입니다.

제 질문은 어떻게 실제 가치를 얻을 수 있습니까?

감사합니다. Andre

+0

하시기 바랍니다 항상 완벽한 실행 계획 과거; 스 니펫이 아닙니다. 최적화 도구가 14 행만 계산하기 때문에 통계가 최신 상태가 아닐 가능성이 큽니다. 따라서 dbms_stats.gather_table_stats (user, 'TAG')를 실행하십시오. – BobC

답변

1

SQL * Plus에서 AUTOTRACE 기능을 사용할 수 있습니다.

예를 들어 here을 참조하십시오.

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

을 그리고 열 E-Rows 및 출력에 A-Rows의 차이점을 찾습니다

+0

autotrace를 on으로 설정하고 autotrace traceonly 옵션을 사용하여 시도했지만, 변경되지 않았습니다. – Andre

+0

나는 sql-Developer를 사용한다. – Andre

2

이 명령을 사용해야합니다.

또한보십시오

0

How do I know if the cardinality estimates in a plan are accurate? 나는이 시도 :

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'));