下面我们来做实验,观察v$sql中的信息,结论是:
set autotrace trace exp没有执行SQL,只是解析SQL;
set autotrace trace stat执行SQL;
set autotrace trace traceonly执行SQL;
SQL> create table test as select * from dba_objects;
表已创建。
SQL> set autotrace trace exp
SQL> alter system flush shared_pool;
系统已更改。
SQL> select * from test where object_id=100;
执行计划
----------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 12 | 2484 | 287 (1)| 00:00:04 |
|* 1 | TABLE ACCESS FULL| TEST | 12 | 2484 | 287 (1)| 00:00:04 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OBJECT_ID"=100)
Note
-----
- dynamic sampling used for this statement (level=2)
SQL> col sql_text format a40;
SQL> set autotrace off
SQL> select s.SQL_TEXT, s.PARSE_CALLS, s.EXECUTIONS
2 from v$sql s
3 where s.SQL_TEXT like 'select * from test where object_id=100%';
SQL_TEXT PARSE_CALLS EXECUTIONS
---------------------------------------- ----------- ----------
select * from test where object_id=100 1 0
SQL> set autotrace trace stat
SQL> alter system flush shared_pool;
系统已更改。
SQL> select * from test where object_id=100;
统计信息
----------------------------------------------------------
582 recursive calls
0 db block gets
1156 consistent gets
663 physical reads
0 redo size
1393 bytes sent via SQL*Net to client
415 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> set autotrace off
SQL> select s.SQL_TEXT, s.PARSE_CALLS, s.EXECUTIONS
2 from v$sql s
3 where s.SQL_TEXT like 'select * from test where object_id=100%';
SQL_TEXT PARSE_CALLS EXECUTIONS
---------------------------------------- ----------- ----------
select * from test where object_id=100 1 1
SQL> set autotrace traceonly
SQL> alter system flush shared_pool;
系统已更改。
SQL> select * from test where object_id=100;
执行计划
----------------------------------------------------------
Plan hash value: 1357081020
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 12 | 2484 | 287 (1)| 00:00:04 |
|* 1 | TABLE ACCESS FULL| TEST | 12 | 2484 | 287 (1)| 00:00:04 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("OBJECT_ID"=100)
Note
-----
- dynamic sampling used for this statement (level=2)
统计信息
----------------------------------------------------------
582 recursive calls
0 db block gets
1156 consistent gets
0 physical reads
0 redo size
1393 bytes sent via SQL*Net to client
415 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
5 sorts (memory)
0 sorts (disk)
1 rows processed
SQL> set autotrace off
SQL> select s.SQL_TEXT, s.PARSE_CALLS, s.EXECUTIONS
2 from v$sql s
3 where s.SQL_TEXT like 'select * from test where object_id=100%';
SQL_TEXT PARSE_CALLS EXECUTIONS
---------------------------------------- ----------- ----------
select * from test where object_id=100 1 1