欢迎来到网际学院,让您的头脑满载而归!

Oracle SQL优化工具之AUTOTRACE的小变化

发布日期:2017-08-20 10:50:46 作者:管理员 阅读:1528

曾几何时,Oracle的autotrace工具在使用的时候是需要执行语句的,比如在oracle9i的版本中,不过现在,如果只是看语句的执行计划的话,语句是不会执行的。

Oracle SQL优化工具之AUTOTRACE的小变化

曾几何时,Oracle的autotrace工具在使用的时候是需要执行语句的,比如在oracle9i的版本中,不过现在,如果只是看语句的执行计划的话,语句是不会执行的。


在第一个session中:
SQL> conn scott/tiger
Connected.
 
SQL> set autotrace trace exp
SQL> select empno,ename,sal from emp order by deptno;

Execution Plan
----------------------------------------------------------
Plan hash value: 150391907

---------------------------------------------------------------------------
| Id | Operation         | Name | Rows | Bytes | Cost (%CPU)| Time    |
---------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |     |   14 |  238 |    4 (25)| 00:00:01 |
|  1 | SORT ORDER BY    |     |   14 |  238 |    4 (25)| 00:00:01 |
|  2 |  TABLE ACCESS FULL| EMP |   14 |  238 |    3  (0)| 00:00:01 |
---------------------------------------------------------------------------


在第二个session中观察:

SQL> get qs.sql
 1 col sql_text for a50
 2 set linesize 120
 3 select sql_text,
 4        hash_value,
 5        executions,
 6        loads,
 7        invalidations
 8 from v$sqlarea
 9* where sql_text like '&text%'
SQL> @qs
Enter value for text: select empno
old  7: where sql_text like '&text%'
new  7: where sql_text like 'select empno%'

SQL_TEXT                                          HASH_VALUE EXECUTIONS     LOADS INVALIDATIONS
-------------------------------------------------- ---------- ---------- ---------- -------------
select empno,ename,sal from emp order by deptno   1938544041         0         1            0


可以看到,语句做了解析(LOADS)的动作,但是并没有真正的执行(EXECUTIONS)

 

但是如果看SQL语句的执行结果,或者说是统计信息,语句还是要执行的

在第一个SESSION中:

SQL> set autotrace on  
SQL> /

    EMPNO ENAME            SAL
---------- ---------- ----------
     7782 CLARK           2450
     7839 KING            5000
     7934 MILLER          1300
     7566 JONES           2975
     7902 FORD            3000
     7876 ADAMS           1100
     7369 SMITH           1200
     7788 SCOTT           3000
     7521 WARD            1250
     7844 TURNER          1500
     7499 ALLEN           1600
     7900 JAMES            950
     7698 BLAKE           2850
     7654 MARTIN          1250

14 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 150391907

---------------------------------------------------------------------------
| Id | Operation         | Name | Rows | Bytes | Cost (%CPU)| Time    |
---------------------------------------------------------------------------
|  0 | SELECT STATEMENT  |     |   14 |  238 |    4 (25)| 00:00:01 |
|  1 | SORT ORDER BY    |     |   14 |  238 |    4 (25)| 00:00:01 |
|  2 |  TABLE ACCESS FULL| EMP |   14 |  238 |    3  (0)| 00:00:01 |
---------------------------------------------------------------------------


Statistics
----------------------------------------------------------
         0 recursive calls
         0 db block gets
         6 consistent gets
         0 physical reads
         0 redo size
       950 bytes sent via SQL*Net to client
       523 bytes received via SQL*Net from client
         2 SQL*Net roundtrips to/from client
         1 sorts (memory)
         0 sorts (disk)
        14 rows processed


在第二个SESSION中观察:

SQL> @qs
Enter value for text: select empno
old  7: where sql_text like '&text%'
new  7: where sql_text like 'select empno%'

SQL_TEXT                                          HASH_VALUE EXECUTIONS     LOADS INVALIDATIONS
-------------------------------------------------- ---------- ---------- ---------- -------------
select empno,ename,sal from emp order by deptno   1938544041         1         1            0

我们能够看到执行解析次数LOADS还是1,说明语句共享,另外我们看到执行次数EXECUTIONS变为1,这说明语句确实的是执行了。


Copyright oneie ©2014-2017 All Rights Reserved. 所有资料来源于互联网对相关版权责任概不负责。如发现侵犯了您的版权请与我们联系 QQ:86662817。 网际学院 版权所有 京ICP备14031243号-3
免责声明  商务合作及投稿请联系 QQ:86662817