先谢谢各位老鸟了:                问题产生原因:同样的SQL 不同时间执行的时间不一样 2秒 ,2分钟不等。                SQL如下:select terminalTime,
 vehicle_ln,
 VEHICLE_ID,
ID,
VEHICLE_CODE,
 
car_state
 
from (
 select
 to_char(TERMINAL_TIME,'yyyy-MM-dd HH24:mi:ss') as terminalTime
 ,vehicle_ln
 ,VEHICLE_ID
 ,ID
 ,VEHICLE_CODE,
 CAR_STATE_FUN(VEHICLE_VIN,'2') as car_state
 from
 (select
 tt.TERMINAL_TIME,tt.VEHICLE_VIN,tt.ID,bt.vehicle_ln,bt.VEHICLE_ID,bt.VEHICLE_CODE
 from IKO_JCO_TERM_T tt,IKO_LS_BASE_INFO_T bt where tt.VEHICLE_VIN =
 bt.VEHICLE_VIN and bt.VALID_FLAG ='0' and tt.VALID_FLAG='0' 
 and bt.ORGANIZATION_ID in 
       
   (select enterprise_id
        from IKO_jco_enterprise_vi
        where left_num >= (select left_num
                     from IKO_jco_enterprise_vi
                     where enterprise_id = '9947038f-2a78-4a81-9f62-d30efeb90508')
        and right_num <=(select right_num
                     from IKO_jco_enterprise_vi
                     where enterprise_id ='9947038f-2a78-4a81-9f62-d30efeb90508')        
   )
   
       
  
 )
)
 
where car_state!='3'其中CAR_STATE_FUN函数 为 对一个表或者多个表 进行多次查询判断等操作。涉及的表 数据量300W 以及 数据量1W 有索引 其中300W数据量表 每30秒要对数据进行并发批量的修改现象:前台页面 显示非常慢 也非常不稳定数据库执行计划               为了解决 以上原因出现的性能 问题  所以提出以下问题:
                
                问题:麻烦各位分析一下 谢谢                 问题: oracle10G 查看数据库各SQL的 执行情况占用资源 等信息 如何查看 还有 如何分析(怎么算好怎么算性能问题)              

解决方案 »

  1.   

    可以参考以下文章~~ 基本如此~~ssh 登录, 输入命令 top  能看出占资源的进程找到最好资源的进程(记住进程号),例如,操作系统进程号为2796,然后根据这个进程号(v$process.spid)在v$process中找到进程地址(v$process.addr),然后根据这个地址在v$session中找到相应的sid(v$session.sid),然后根据这个sid找到相应的hash alue(v$session. sql_hash_value),然后根据这个hash alue在v$sqltext,$sql,v$sqlarea等视图中找到对应的sql语句(sql_text)。select * from v$process where spid=‘2796‘;select sql_hash_value,machine,username,program from v$session where PAddr=‘63B7A584‘;select * from v$sqltext where hash_value=‘833203018‘;select * from v$sql where hash_value=‘833203018‘;select * from v$sqlarea where hash_value=‘833203018‘;SELECT a.username,a.machine,a.program,a.sid,a.serial#,a.status,c.piece,c.sql_text FROM v$session a,v$process b,v$sqltext c WHERE b.spid=‘2796‘ AND b.addr=a.paddr AND a.sql_address=c.address(+) ORDER BY c.piece 
      

  2.   

    pl/sql developer 查询窗口中按F5 进入执行计划窗口具体看下有没有走索引 或索引漏建了 等等
      

  3.   

    比较经典的pl/sql developer窗口中F5键,就可以查询执行计划了。
      

  4.   

    我现在就是不清楚 为什么同一个SQL 执行的时间 前后几秒间隔 竟然执行的时间 不同 想不明白了 谁能解惑一下啊
      

  5.   

    你这么写能快就出鬼了。执行时间不同是因为一些是从database buffer cache里面读的。不是从真正的物理存储里面读的。所以执行一次之后这里会有记录。肯定快啦。建议LZ先看下ORACLE的优化和ORACLE的机制。这么写效率太低
      

  6.   

    用10g,建议你先安装oracle oem,监控下你的数据库,占用资源大的sql会显示出来,用oracle的addm提供的建议优化下,这个可能是最简单的了,图形化界面。查看你sql的执行计划,最简单的:登陆sqlplus:sqlplus /nolog
    conn 用户名/密码
    set autotrace traceonly
    set timing on
    然后把你的sql贴上去执行以下会显示执行计划再看下时间,物理读,逻辑读。
      

  7.   

    有什么好的  ORACLE的优化和ORACLE的机制的书没有