oracle

Oracle AUTOTRACEを利用する

AUTOTRACEはEXPLAIN PLANと異なり、実際にSQLを実行しシステムリソースの使用状況を取得しますので時間はかかりますが、性格なプランを確認する際はこちらを使用します。

12c以降のバージョンでは簡単に使えるようになっています。

たしか11gぐらいまでは、$ORACLE_HOME/rdbms/admin/utlxplan.sqlを実行し専用のテーブルを作成し、専用のロールを作成してとちょっと面倒でしたが、12c以降はSELECT_CATALOG_ROLEロールを対象のスキーマに付与してあげるだけで利用できるようです。(SELECT_CATALOG_ROLEにこだわらなくとも、おそらく以下3つのVIEWが参照できる権限さえあれば良いとおもいます。)
V_$SESSTAT
V_$MYSTAT
V_$STATNAME

以下の通り、何も権限を付与していない状況で利用を試みるとエラーがでます。

SQL>  set autotrace on
SP2-0618: セッション識別子が見つかりません。PLUSTRACEロールが有効かを確認してください。
SP2-0611: STATISTICSレポートを使用可能にするときにエラーが発生しました。
SQL>

そこで、systemユーザから以下の通りSELECT_CATALOG_ROLEロールを付与すると利用できました。

grant SELECT_CATALOG_ROLE to scott
;
SQL> set autotrace on
SQL> select * from emp;

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7369 SMITH                CLERK                    7902 80-12-17        800                    20
      7499 ALLEN                SALESMAN                 7698 81-02-20       1600        300         30
      7521 WARD                 SALESMAN                 7698 81-02-22       1250        500         30
      7566 JONES                MANAGER                  7839 81-04-02       2975                    20
      7654 MARTIN               SALESMAN                 7698 81-09-28       1250       1400         30
      7698 BLAKE                MANAGER                  7839 81-05-01       2850                    30
      7782 CLARK                MANAGER                  7839 81-06-09       2450                    10
      7839 KING                 PRESIDENT                     81-11-17       5000                    10
      7844 TURNER               SALESMAN                 7698 81-09-08       1500          0         30
      7900 JAMES                CLERK                    7698 81-12-03        950                    30
      7902 FORD                 ANALYST                  7566 81-12-03       3000                    20

     EMPNO ENAME                JOB                       MGR HIREDATE        SAL       COMM     DEPTNO
---------- -------------------- ------------------ ---------- -------- ---------- ---------- ----------
      7934 MILLER               CLERK                    7782 82-01-23       1300                    10

12行が選択されました。


実行計画
----------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |    12 |   468 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| EMP  |    12 |   468 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------


統計
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          8  consistent gets
          0  physical reads
          0  redo size
       1291  bytes sent via SQL*Net to client
        295  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
         12  rows processed

SQL>
スポンサーリンク
コピペで使う