WEB开发网
开发学院数据库Oracle 关于Oracle数据库的性能优化心得 阅读

关于Oracle数据库的性能优化心得

 2007-05-08 12:11:29 来源:WEB开发网   
核心提示: 提示:我在做优化sql时,经常碰到使用in的语句,关于Oracle数据库的性能优化心得(3),这时我们一定要用exists把它给换掉,因为Oracle在处理In时是按Or的方式做的,使用了多少的IO,以下是我提供的参考脚本:脚本说明:查看占io较大的正在运行的sessionSELECT s

提示:我在做优化sql时,经常碰到使用in的语句,这时我们一定要用exists把它给换掉,因为Oracle在处理In时是按Or的方式做的,即使使用了索引也会很慢。

比如:

  SELECT col1,col2,col3 FROM table1 a
   WHERE a.col1 not in (SELECT col1 FROM table2)

可以换成:

  SELECT col1,col2,col3 FROM table1 a
   WHERE not exists
   (SELECT 'x' FROM table2 b
   WHERE a.col1=b.col1)

4、另一个有用的脚本:查找前十条性能差的sql.

  SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,
   COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea
   order BY disk_reads DESC )where ROWNUM<10 ;

二、迅速发现Oracle Server的性能问题的成因,我们可以求助于v$session_wait这个视图,看系统的这些session在等什么,使用了多少的IO。以下是我提供的参考脚本:

脚本说明:查看占io较大的正在运行的session

  SELECT se.sid,se.serial#,pr.SPID,se.username,se.status,
   se.terminal,se.program,se.MODULE,、se.sql_address,st.event,st.
   p1text,si.physical_reads,
   si.block_changes FROM v$session se,v$session_wait st,
   v$sess_io si,v$process pr WHERE st.sid=se.sid AND st.
   sid=si.sid AND se.PADDR=pr.ADDR AND se.sid>6 AND st.
   wait_time=0 AND st.event NOT LIKE '%SQL%' ORDER BY physical_reads DESC

对检索出的结果的几点说明:

1、我是按每个正在等待的session已经发生的物理读排的序,因为它与实际的IO相关。

上一页  1 2 3 4  下一页

Tags:关于 Oracle 数据库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接