クエリーの結果を捨てて実行時間のみを得る方法
SQL*Plusで SET AUTOTRACE TRACEONLY を設定することで、クエリの実行結果を表示せずに実行だけができる。
実際に実行結果はクライアントに転送されるので、それを含めて時間をみることができる。
接続してラインサイズを調整。
oracle$ sqlplus username/password SQL*Plus: Release 11.2.0.1.0 Production on Thu Feb 12 23:10:00 2015 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> SET LINESIZE 200
肝心の SET AUTOTRACE TRACEONLY を実行。実行計画と統計も表示する。
SET TIMING ON をあわせて設定して時間も計測。
SQL> SET AUTOTRACE TRACEONLY EXPLAIN STATISTICS SQL> SET TIMING ON
実行!
SQL> SELECT C.customerId, NVL(O.numOfOrder, 0) numOfOrder FROM CUSTOMERS C LEFT OUTER JOIN (SELECT customerId, count(*) numOfOrder FROM ORDERS GROUP BY customerId) O ON C.customerId = O.customerId; 100000 rows selected. Elapsed: 00:00:00.68 Execution Plan ---------------------------------------------------------- Plan hash value: 142913353 ---------------------------------------------------------------------------------------------- | Id | Operation | Name | Rows | Bytes | TempSpc| Cost (%CPU)| Time | ---------------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 100K| 3027K| | 591 (3)| 00:00:09 | |* 1 | HASH JOIN OUTER | | 100K| 3027K| | 591 (3)| 00:00:09 | | 2 | INDEX FAST FULL SCAN| CUSTOMERS_PK| 100K| 488K| | 38 (3)| 00:00:01 | | 3 | VIEW | | 100K| 2559K| | 552 (3)| 00:00:08 | | 4 | HASH GROUP BY | | 100K| 492K| 3552K| 552 (3)| 00:00:08 | | 5 | TABLE ACCESS FULL | ORDERS | 300K| 1464K| | 167 (2)| 00:00:03 | ---------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 1 - access("C"."CUSTOMERID"="O"."CUSTOMERID"(+)) Statistics ---------------------------------------------------------- 0 recursive calls 0 db block gets 569 consistent gets 0 physical reads 0 redo size 2209414 bytes sent via SQL*Net to client 73850 bytes received via SQL*Net from client 6668 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 100000 rows processed
「100000 rows selected.」の通り、10万行が得られているが、表示はされない。
SET AUTOTRACE するためのロール
SET AUTOTRACE を設定するためには PLUSTRACE ロールが付与されている必要がある。
PLUSTRACE を作成するには、SYS で @?/sqlplus/admin/plustrce.sql を実行すればよい。
ロールが出来れば GRANT するだけ。