set autotrace 到底有没有执行SQL?

 下面我们来做实验,观察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

你可能感兴趣的:(set autotrace 到底有没有执行SQL?)