SQL実行計画を表示する方法

4451 ワード

注意事項:
1.  DDL     ORACLE      SQL      ,        ,           DDL  ,             SQL          。
          ,     OLTP         ,                   ,         。

2.    DBMS_SHARED_POOL.PURGE              Shared Cursor,             SQL    Shared Cursor,
               Oracle     SQL      ,       SQL           。
    SQL> SELECT SQL_TEXT,SQL_ID,ADDRESS,HASH_VALUE FROM  v$SQLAREA WHERE SQL_TEXT LIKE 'SELECT COUNT(*) FROM T1%';
    SQL> EXEC SYS.DBMS_SHARED_POOL.PURGE('address,hash_value','c')   --              c,       Shared Cursor。

3.Child Cursor        SQL           ,     SQL              ,       SQL SQL          ,
       SQL                  ,   SQL              (  3.2.5       )

1つ目の方法:explain planコマンド
explain plan for +  SQL
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY)

  :SELECT DBMS_METADATA.GET_DDL('TABLE','PLAN_TABLES$','SYS') FROM DUAL   --     

      SELECT SID FROM v$MYSTAT WHERE ROWNUM<2;       --    SESSION SESSION ID

2つ目の方法:DBMS_XPLANパッケージ
A.   SQLPLUS         SQL     
  SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'ADVANCED'))   

B.      SQL     (    SQL        Child Cursor    age out Shared Pool,            SQL     )
  SQL>SELECT SQL_TEXT,SQL_ID,HASH_VALUE,CHILD_NUMBER FROM v$SQL WHERE SQL_TEXT LIKE 'SELECT EMPNO,ENAME%';
      /*     SQL    Child Cursor  Library Cache ,      v$SQL     SQL Child Cursor     ,  SQL ID,SQL HASH VALUE,Child Cursor Number  
  
  SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('sql_id/hash_value',child_cursor_number,'ADVANCED')) ;

    :SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('3yfu3wh150aqt','0','ADVANCED')) ;

C.      SQL         。
       A、B      SQL           SQL       Shared Pool ,    SQL        age out Shared Pool,
        SQL      ORACLE   AWR Repository ,         C    SQL         。
   
   SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('79glp919t7x4u')) ;

    :      
    1.      AWR  ,       Shared Pool
      SQL> EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
      SQL> ALTER SYSTEM FLUSH SHARED_POOL;  --              
    2.    SQL        age out Shared Pool 
      SQL> SELECT SQL_TEXT,SQL_ID,VERSION_COUNT,EXECUTIONS FROM  v$SQLAREA WHERE SQL_TEXT LIKE 'SELECT COUNT(*) FROM T1%';  --        
    3.              AWR        SQL         AWR Repository ,              C    SQL         :
      SQL> SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_AWR('79glp919t7x4u')) ;

第三の方式:AUTOTRACEスイッチ
SQL> set autot ?
Usage: SET AUTOT[RACE] {OFF | ON | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
SQL>SET AUTOTRACE OFF (set autot off)            
    SET AUTOTRACE ON (set autot on)     :                  
    SET AUTOTRACE TRACEONLY(set autot trace)  :           :                  
    SET AUTOTRACE TRACEONLY EXPLAN (set autot  trace exp) ;;:   :    
    SET AUTOTRACE TRACEONLY STATISTICS(set autot  trace stat)  ;     :             

  :1.              ,      
      2.            。

4つ目の方法:statistics_レベル=all(テーブルが表示されるアクセス数)
SQL> alter session set statistics_level=all;
SQL>     
SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

5つ目の方法:10046イベント
  :1.    SQL         。
      2.  SQL        ,SQL  SQL,      ,    。
      3.            ,      。
      4.                。
      5.         。

  :1.            。
      2.    。
      3.                   。

第6の方法;AWR SQLレポート
A.   AWR      SQL 
    AWR  
  SQL>@?\rdbms\admin\awrrpt.sql

B.      $ORACLE_HOME/rdbms/admin/awrsqrpt.sql,         、        、  SQL ID      AWR SQL     ;
   SQL> @?\rdbms\admin\awrsqrpt.sql';(        AWR       )

-----------------------------------------------------------------------------------------------------
非dbaユーザset autotraceプロンプトSTATISTICSレポート有効化エラー
plustraceロールを作成し、特定のユーザーにロールを割り当てます.Oracleでは、ロールplustraceの作成スクリプトが提供されています.
@/u01/app/oracle/product/11.2.0/dbhome_1/sqlplus/admin/plustrce.sql

zwユーザーにロールを割り当てる
SQL> grant plustrace to zw;

SQL> conn zw/zw
		Connected.
SQL> set autotrace traceonly;

すべてのユーザーにロールを付与
SQL> grant plustrace to public;