怎么审计oracle的执行计划啊
oracle有没有审计执行计划的功能吗?
以前好像听说过,我的目标是将执行计划的审计和其他细粒度审计结合起来使用。

解决方案 »

  1.   

    日常开发活动中,有时候需要对oracle执行计划进行监控,以此来调优程序和数据库方面的性能。
      常用方法有以下几种:
      一、通过PL/SQL Dev工具
      1、直接File->New->Explain Plan Window,在窗口中执行sql可以查看计划结果。其中,Cost表示cpu的消耗,单位为n%,Cardinality表示执行的行数,等价Rows。
      2、先执行 EXPLAIN PLAN FOR   select * from tableA where paraA=1,再 select * from table(DBMS_XPLAN.DISPLAY)便可以看到oracle的执行计划了,看到的结果和1中的一样,所以使用工具的时候推荐使用1方法。
      注意:PL/SQL Dev工具的Command window中不支持set autotrance on的命令。还有使用工具方法查看计划看到的信息不全,有些时候我们需要sqlplus的支持。
      二、通过sqlplus
      1、一般情况都是本机链接远程服务器,所以命令如下:
      sqlplus user/pwd@serviceName
      此处的serviceName为tnsnames.ora中定义的命名空间。
      2、执行set autotrace on,然后执行sql语句,会列出以下信息:
      (省略一些信息)
      统计信息
      1  recursive calls (归调用次数) 
      0  db block gets 
      2  consistent gets 
      0  physical reads (物理读——执行SQL的过程中,从硬盘上读取的数据块个数) 
      0  redo size (重做数——执行SQL的过程中,产生的重做日志的大小) 
      358  bytes sent via SQL*Net to client 
      366  bytes received via SQL*Net from client 
      1  SQL*Net roundtrips to/from client 
      0  sorts (memory)     在内存中发生的排序 
      0  sorts (disk)     在硬盘中发生的排序
      1  rows processed
      省略部分信息和通过PL/SQL Dev工具查看执行计划的信息一样,下面的统计信息是更详细的。
      判断SQL效率高低不关通过时间来衡量,还应该通过执行SQL执行状态里面的逻辑读的数量
      逻辑读=(db block gets+ consistent gets) 
      

  2.   

    为什么要审计执行计划?楼主想要通过审计执行计划得到什么结果?执行计划本身只是一个对要执行的SQL进行效率的评估,审计执行计划个人感觉是没有意义的。