環境:Oracle9i(9.2.0.1.0)
Oracleでは、実行計画を確認することで表の結合方法やインデックスの使用状況 などを確認することができ、チューニングに役立ちます。
実行計画の手順は、PLAN_TABLEというテーブルに保存されます。まず、PLAN_TABLEを作成します。
PLAN_TABLEが定義されているutlxplan.sqlスクリプトが用意されているので、SYSユーザーで 実行します。($ORACLE_HOME/rdbms/admin/utlxplan.sql)
SYSユーザーでSQL*Plusを起動します。
SQL> @$ORACLE_HOME/rdbms/admin/utlxplan.sql
全てのユーザーが使用できるように、PUBLICシノニムを作成し権限を付与します。
SQL> CREATE OR REPLACE PUBLIC SYNONYM PLAN_TABLE FOR SYS.PLAN_TABLE; SQL> GRANT ALL ON PLAN_TABLE TO PUBLIC;
以上で実行計画を見ることができます。
実行計画を確認するには、EXPLAIN PLAN 文を使用します。確認したい SQL文(SELECT、INSERT、UPDATE、DELETE、CREATE TABLE、CREATE INDEX、ALTER INDEX ・・・ REBUILD) をFOR句に指定して実行します。
SQL> EXPLAIN PLAN FOR 2 SELECT * FROM MST_USER WHERE USER_ID=12345; 解析されました。
PLAN_TABLEに格納された実行計画を確認するには、Oracleから提供されているutlxpls.sqlを使用します。 ($ORACLE_HOME/rdbms/admin/utlxpls.sql)
SQL> @$ORACLE_HOME/rdbms/admin/utlxpls.sql
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------
----------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost |
----------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | |
| 1 | TABLE ACCESS BY INDEX ROWID| MST_USER | | | |
|* 2 | INDEX UNIQUE SCAN | PK_MST_USER | | | |
----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------
2 - access("MST_USER"."USER_ID"='12345')
utlxpls.sqlの中では、次のようなSELECT文が実行されておりIDの指定やフォーマットの指定ができます。
select plan_table_output from table(dbms_xplan.display('plan_table',null,'serial'));
指定できるフォーマットは、BASIC、TYPICAL、ALL、SERIALの4種類となっているようです。
Copyright 1997-2008 BBB All rights reserved.