WEB开发网
开发学院数据库Oracle Oracle DBA优化数据库性能心得体会 阅读

Oracle DBA优化数据库性能心得体会

 2007-05-13 12:28:05 来源:WEB开发网   
核心提示: 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='ORCL
  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='ORCL' AND b.addr=a.paddr AND
  a.sql_address=c.address(+)order BY c.piece

我们就可以把得到的这个sql分析一下,看一下它的执行计划是否走索引,对其优化避免全表扫描,以减少IO等待,从而加快语句的执行速度。

提示:我在做优化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 2 3 4  下一页

Tags:Oracle DBA 优化

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