/* 
 gather_plan_statistics hint를 사용한 SQL Trace+Tkprof 수행 동일 효과 보기
 select * from table(dbms_xplan.display_cursor(null,null,'ALLSTATS LAST'))
 (Oracle 10g ~)
*/

-- /*+ gather_plan_statistics */ Hint 이용한 방법
SELECT  /*+ gather_plan_statistics */ 
     A.OWNER
   , A.TABLE_NAME
   , A.COLUMN_ID
    , A.COLUMN_NAME
    , B.COMMENTS
    , A.DATA_TYPE
    , A.DATA_LENGTH
    , A.NULLABLE
FROM   ALL_TAB_COLUMNS A
     , ALL_COL_COMMENTS B
WHERE  A.TABLE_NAME = B.TABLE_NAME
      AND  A.COLUMN_NAME = B.COLUMN_NAME
      AND A.OWNER in ('SPSDC','SPMKT','SPSAC','SPMBR','CMSTORE')      /*owner name*/
--      AND A.TABLE_NAME = 'EMPLOY' /*table name*/
      AND  A.COLUMN_NAME like 'INSD_DEVICE_ID%'
--      AND  B.COMMENTS like '%위치%'
ORDER BY A.TABLE_NAME, A.COLUMN_ID ;


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


select * from table(dbms_xplan.display_cursor(NULL,NULL,'allstats last -rows +alias +outline +predicate'));



-- 결과
SQL_ID  1sq5s3pjphk1q, child number 0
-------------------------------------
SELECT  /*+ gather_plan_statistics */       A.OWNER    , A.TABLE_NAME   
 , A.COLUMN_ID     , A.COLUMN_NAME     , B.COMMENTS     , A.DATA_TYPE   
  , A.DATA_LENGTH     , A.NULLABLE FROM   ALL_TAB_COLUMNS A      , 
ALL_COL_COMMENTS B WHERE  A.TABLE_NAME = B.TABLE_NAME       AND  
A.COLUMN_NAME = B.COLUMN_NAME       AND A.OWNER in 
('SPSDC','SPMKT','SPSAC','SPMBR','CMSTORE')      /*owner name*/ --      
AND A.TABLE_NAME = 'EMPLOY' /*table name*/       AND  A.COLUMN_NAME 
like 'INSD_DEVICE_ID%' --      AND  B.COMMENTS like '%위치%' ORDER BY 
A.TABLE_NAME, A.COLUMN_ID
 
Plan hash value: 2855117487
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                          | Name              | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |  OMem |  1Mem | Used-Mem |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                                   |                   |      1 |        |     50 |00:00:01.18 |   13797 |   2315 |       |       |          |
|   1 |  TABLE ACCESS BY INDEX ROWID BATCHED               | OBJ$              |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|*  2 |   INDEX RANGE SCAN                                 | I_OBJ1            |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|   3 |   TABLE ACCESS BY INDEX ROWID BATCHED              | OBJ$              |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|*  4 |    INDEX RANGE SCAN                                | I_OBJ1            |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|   5 |    TABLE ACCESS BY INDEX ROWID BATCHED             | OBJ$              |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|*  6 |     INDEX RANGE SCAN                               | I_OBJ1            |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|   7 |     TABLE ACCESS BY INDEX ROWID BATCHED            | OBJ$              |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|*  8 |      INDEX RANGE SCAN                              | I_OBJ1            |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|   9 |      TABLE ACCESS BY INDEX ROWID BATCHED           | OBJ$              |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|* 10 |       INDEX RANGE SCAN                             | I_OBJ1            |      0 |      1 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|  11 |  SORT ORDER BY                                     |                   |      1 |      1 |     50 |00:00:01.18 |   13797 |   2315 |  6144 |  6144 | 6144  (0)|
|* 12 |   FILTER                                           |                   |      1 |        |     50 |00:00:01.83 |   13797 |   2315 |       |       |          |
|  13 |    NESTED LOOPS OUTER                              |                   |      1 |      1 |     50 |00:00:01.81 |   12214 |   2304 |       |       |          |
|  14 |     NESTED LOOPS OUTER                             |                   |      1 |      1 |     50 |00:00:01.81 |   12160 |   2279 |       |       |          |
|  15 |      NESTED LOOPS OUTER                            |                   |      1 |      1 |     50 |00:00:01.79 |   12056 |   2226 |       |       |          |
|  16 |       NESTED LOOPS OUTER                           |                   |      1 |      1 |     50 |00:00:01.79 |   11924 |   2218 |       |       |          |
|  17 |        NESTED LOOPS OUTER                          |                   |      1 |      1 |     50 |00:00:01.79 |   11924 |   2218 |       |       |          |
|  18 |  ......

|  71 |     FIXED TABLE FULL                               | X$KZSRO           |      0 |      2 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
|* 72 |     INDEX RANGE SCAN                               | I_OBJAUTH2        |      0 |      2 |      0 |00:00:00.01 |       0 |      0 |       |       |          |
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
 
   2 - access("O"."OBJ#"=:B1)
   4 - access("O"."OBJ#"=:B1)
   6 - access("O"."OBJ#"=:B1)
   8 - access("O"."OBJ#"=:B1)
  10 - access("O"."OBJ#"=:B1)
  12 - filter(((INTERNAL_FUNCTION("O"."TYPE#") OR ("O"."TYPE#"=2 AND  IS NULL)) AND ("O"."SPARE3"=USERENV('SCHEMAID') OR  IS NOT NULL OR  IS NOT NULL) AND 
              (BITAND("O"."FLAGS",1048576)=1048576 OR BITAND("U"."SPARE1",16)=0 OR ("O"."TYPE#"<>88 AND  IS NULL) OR ( IS NOT NULL AND 
              ((SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND 
              "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL))) AND (BITAND("O"."FLAGS",1048576)=1048576 OR BITAND("U"."SPARE1",16)=0 
              OR ("O"."TYPE#"<>88 AND  IS NULL) OR ( IS NOT NULL AND ((SYS_CONTEXT('userenv','current_edition_name')='ORA$BASE' AND "U"."TYPE#"<>2) OR ("U"."TYPE#"=2 AND 
              "U"."SPARE2"=TO_NUMBER(SYS_CONTEXT('userenv','current_edition_id'))) OR  IS NOT NULL))) AND ("U"."NAME"=SYS_CONTEXT('USERENV','CURRENT_USER') OR 
              ORA_CHECK_SYS_PRIVILEGE("U"."USER#",2)=1 OR  IS NOT NULL)))
  25 - access("C"."NAME"="C"."NAME")  ....

 

 

 

+ Recent posts