SQL実行計画を表示する方法
4451 ワード
注意事項:
1つ目の方法:explain planコマンド
2つ目の方法:DBMS_XPLANパッケージ
第三の方式:AUTOTRACEスイッチ
4つ目の方法:statistics_レベル=all(テーブルが表示されるアクセス数)
5つ目の方法:10046イベント
第6の方法;AWR SQLレポート
-----------------------------------------------------------------------------------------------------
非dbaユーザset autotraceプロンプトSTATISTICSレポート有効化エラー
plustraceロールを作成し、特定のユーザーにロールを割り当てます.Oracleでは、ロールplustraceの作成スクリプトが提供されています.
zwユーザーにロールを割り当てる
すべてのユーザーにロールを付与
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;