プライマリ・コンテンツに移動
SQL*Plus®ユーザーズ・ガイドおよびリファレンス
リリース1 (12.1)
B71396-03
目次へ移動
目次
索引へ移動
索引

前
次

文のトレースについて

SQLオプティマイザが使用する実行パス、および文の実行統計に関するレポートを自動的に取得できます。このレポートは、SQLのDML(SELECT、DELETE、UPDATEおよびINSERT)文が正常に実行された後に生成されます。このレポートは、これらの文のパフォーマンスを監視し、チューニングする場合に有効です。

動的サンプリングが有効な場合、DMLに関するSQL*Plusのレポート出力が異なる場合があります。

自動トレース・レポートの制御

AUTOTRACEシステム変数を設定することによって、レポートを制御できます。

自動トレースの設定 結果

SET AUTOTRACE OFF

AUTOTRACEレポートは生成されません。これはデフォルトです。

SET AUTOTRACE ON EXPLAIN

AUTOTRACEレポートには、オプティマイザの実行パスのみ示されます。

SET AUTOTRACE ON STATISTICS

AUTOTRACEレポートには、SQL文の実行統計のみ示されます。

SET AUTOTRACE ON

AUTOTRACEレポートには、オプティマイザの実行パスとSQL文の実行統計の両方が含まれます。

SET AUTOTRACE TRACEONLY

SET AUTOTRACE ONに似ていますが、ユーザーの問合せの出力は行われません。STATISTICSが使用可能な場合、問合せデータはフェッチされますが、出力は行われません。

この機能を使用するには、自分のスキーマにPLAN_TABLE表を作成する必要があります。また、PLUSTRACEロールが必要です。DBA権限に、PLUSTRACEロールを付与する必要があります。ロールの付与方法およびPLAN_TABLE表の作成方法については、『Oracle Database SQL言語リファレンス』を参照してください。

ロールおよびPLAN_TABLE表の詳細は、『Oracle Database SQL言語リファレンス』および「SET」コマンドのAUTOTRACE変数を参照してください。

注意:

SQL*Plus AUTOTRACEでは、ALTER SESSION SET CONTAINERオプションを使用したコンテナの切替えはサポートしていません。この場合に収集された統計データには一貫性がない可能性があります。

Table created.
Role dropped.
create role plustrace;
Role created.
grant plustrace to dba with admin option;
Grant succeeded.
Grant succeeded.

例8-1 PLAN_TABLEの作成

SQL*Plusセッションから次のコマンドを実行して、HRスキーマにPLAN_TABLEを作成します。

CONNECT HR 
@$ORACLE_HOME/rdbms/admin/utlxplan.sql 

例8-2 PLUSTRACEロールの作成

SQL*Plusセッションから次のコマンドを実行して、PLUSTRACEロールを作成し、DBAにそのロールを付与します。

CONNECT / AS SYSDBA 
@$ORACLE_HOME/sqlplus/admin/plustrce.sql 

drop role plustrace;

例8-3 PLUSTRACEロールの付与

SQL*Plusセッションから次のコマンドを実行して、HRユーザーにPLUSTRACEロールを付与します。

CONNECT / AS SYSDBA 
GRANT PLUSTRACE TO HR; 

実行計画

実行計画は、SQLオプティマイザの問合せ実行パスを示します。実行計画の出力は、EXPLAIN PLANおよびDBMS_XPLANを使用して生成します。

DBMS_XPLANの出力の解釈については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

統計

統計は、文を実行したときにサーバーによって記録され、文の実行に必要とされたシステム・リソースを示します。結果には、次の統計が含まれます。

データベース統計名 説明

recursive calls

ユーザーおよびシステム・レベルの両方で生成された再帰コールの数。Oracle Databaseでは、内部処理に使用した表を保持します。これらの表を変更する必要がある場合、Oracle Databaseでは内部SQL文を内部的に生成し、この内部SQL文がかわりに再帰的コールを生成します。

db block gets

CURRENTブロックが要求された回数。

consistent gets

ブロックに対して読取り一貫性が要求された回数。

physical reads

ディスクから読み込まれたデータ・ブロックの合計数。「physical reads direct」とバッファ・キャッシュへの読込み合計数を足した数と同じ値になります。

redo size

生成されたREDOの合計バイト数

bytes sent through Oracle Net Services to client

フォアグラウンド・プロセスからクライアントへ送信された合計バイト数。

bytes received through Oracle Net Services from client

Oracle Netによってクライアントから受信した合計バイト数。

Oracle Net Services round-trips to/from client

クライアントとの間で送受信されたOracle Netメッセージの合計数。

sorts (memory)

メモリー内で完全に実行され、ディスク書込みを必要としないソート操作数

sorts (disk)

1回以上のディスク書込みを必要としたソート操作数

rows processed

操作中に処理された行の数。

統計の中で参照されるクライアントは、SQL*Plusです。「Oracle Net」は、Oracle Netがインストールされているかどうかに関係なく、SQL*Plusとサーバー間の汎用プロセス通信を意味します。統計レポートのデフォルト書式は変更できません。

データベース統計の完全なリストについては、『Oracle Databaseリファレンス』を参照してください。統計およびその解釈方法の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』の第3章「オプティマイザ統計の収集」を参照してください。

LAST_NAME                     SALARY JOB_TITLE
------------------------- ---------- -----------------------------------
King                           24000 President
De Haan                        17000 Administration Vice President
Kochhar                        17000 Administration Vice President
Partners                       13500 Sales Manager
Russell                        14000 Sales Manager
Hartstein                      13000 Marketing Manager
6 rows selected.
 
Execution Plan
----------------------------------------------------------
Plan hash value: 2988506077
------------------------------------------------------------------------------
| Id  | Operation          | Name     | Rows | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |          |    6 |   360 |     6  (17)| 00:00:01 |
|*  1 |  HASH JOIN         |          |    6 |   360 |     6  (17)| 00:00:01 |
|*  2 |   TABLE ACCESS FULL| EMPLOYEES|    6 |   204 |     3   (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL| JOBS     |   19 |   494 |     2   (0)| 00:00:01 |
------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("E"."JOB_ID"="J"."JOB_ID")
   2 - filter("E"."SALARY">12000)
 
Note
-----
   - dynamic sampling used for this statement
 
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         10  consistent gets
          0  physical reads
          0  redo size
        706  bytes sent via Oracle Net Services to client
        496  bytes received via Oracle Net Services from client
          2  Oracle Net Services roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          6  rows processed
6 rows selected.
 
Execution Plan
----------------------------------------------------------
Plan hash value: 2988506077
 
------------------------------------------------------------------------------
| Id  | Operation          | Name     | Rows | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |          |    6 |   360 |     6  (17)| 00:00:01 |
|*  1 |  HASH JOIN         |          |    6 |   360 |     6  (17)| 00:00:01 |
|*  2 |   TABLE ACCESS FULL| EMPLOYEES|    6 |   204 |     3   (0)| 00:00:01 |
|   3 |   TABLE ACCESS FULL| JOBS     |   19 |   494 |     2   (0)| 00:00:01 |
------------------------------------------------------------------------------
 
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("E"."JOB_ID"="J"."JOB_ID")
   2 - filter("E"."SALARY">12000)
 
Note
-----
   - dynamic sampling used for this statement
 
Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
         10  consistent gets
          0  physical reads
          0  redo size
        706  bytes sent via Oracle Net Services to client
        496  bytes received via Oracle Net Services from client
          2  Oracle Net Services roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          6  rows processed

このオプションは、大規模な問合せのチューニング中に、問合せレポートを表示しない場合に有効です。

注意:

出力は、サーバーのバージョンおよび構成によって異なります。

例8-4 パフォーマンス統計および問合せ実行パス用の文のトレース

SQLバッファに次の文が含まれているとします。

SELECT E.LAST_NAME, E.SALARY, J.JOB_TITLE
FROM EMPLOYEES E, JOBS J
WHERE E.JOB_ID=J.JOB_ID AND E.SALARY>12000;

この文を実行すると、次のように文のトレースが自動的に行われます。

SET AUTOTRACE ON
/

例8-5 問合せデータを表示せずに文をトレースする方法

問合せデータを表示せずに同じ文をトレースするには、次のように入力します。

SET AUTOTRACE TRACEONLY
/