资源描述:
《oracle性能优化的基本方法概述》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、oracle性能优化的基本方法概述1)设立合理的性能优化目标。2)测量并记录当前性能。3)确定当前Oracle性能瓶颈(Omclc等待什么、哪些SQL语句是该等待事件的成分)。4)把等待事件记入跟踪文件。5)确定当前的OS瓶颈。6)优化所需的成分(应用程序、数据库、I/O、争用、OS等)。7)跟踪并实施更改控制过程。8)测量并记录当前性能9)重复步骤3到7,直到满足优化目标1.设立合理的性能优化目标重点:关于设立目标的最重要的一点是它们必须是可量化和可达到的。方法:目标必须是当前性能和所需性能的的陈述形式的语句。只需填写下列语句中的空格即可。花费了(时/分/秒),但要
2、求它在(时/分/秒)内执行。使用了(资源量),但它不能使用超过。2.测量并记录当前性能重点:(1)需要在峰值活动时间获得当前系统性能快照(2)关键是要在岀现性能问题的吋间段内采集信息(3)必须在合理的时间段上采集,一般在峰值期间照几个为期15分钟的快照方法:执行STATSPACK-建立性能快照表空间sqlplussysassysdbacreatetablespaceperfstatdatafile/u02/oradata/dbnms/perfstat.dbf'size500Mcxtcntmemagcmentlocal;—安装STATSPACK@$ORACLE_HOME
3、/rdbms/admin/spereate.sql;-获取程能数据,可以牛成多个快照sqlplusperfstatexecutestatspack.snap;-生成性能快照的报表sqlplusperfstatselectmin(snapid)snapidmin,max(snapid)snapidmaxfromstats$snapshot;@$ORACLE_HOME/rdbms/admin/spreport;-该报看中有关于性能的重要信息,如前5位的等待事件、cache大小、各种内存结构的命中率、每秒及每事务逻辑、物理读写数据块数、性能最差的sql语句等3.确定当前Or
4、acle性能瓶颈重点:从Oracle等待接口v$system_event、v$session_event和v$session_wait中获得等待事件,进而找出影响性能的对象和sql语可"方法:―首先,利用v$systcm_cvcnt视图执行下面的查询查看数据库屮某些常见的等待事件:select*fromv$systemeventwhereeventinbufferbusywaits','dbfilesequentialread',,dbfileseatteredrcad,,'enqueue",'freebufferwaits','latchfree','logfile
5、paralleiwrite,'logfilesync,);--接着,利用下面对v$session_event和v$session视图进行的查询,研究具有对上面显示的内容有贡献的等存事件的会话:selectse.sid,s.username,se.event,se.total_waits,se.time_weiited,se.average_waitfromv$sessions,v$session_eventsewheres.sid=se.sidandse.eventnotlike'SQL*Net%‘ands.status二'ACTTVE,ands.usernameis
6、notnull;—使用下面查询找到与所连接的会话有关的当前等待事件。这些信息是动态的,为了查看一个会话的等待最多的事件是什么,需要多次执行此查询。selectsw.sid,s.username,sw.event,sw.wait_time,sw.state,sw.seconds_in_weiitSEC.INJVAITfromv$sessions,v$session_waitswwheres.sid=sw.sidandsw.eventnotlike'SQL*Net%'ands.usernameisnotnul1orderbysw.wait_timcdesc;-查询会话等待
7、事件的详细信息selectsid,event,pltext,pl,p2text,p2,p3text,p3fromv$session_waitwheresidbetween&1and&2andeventnotlike'%SQL%'andeventnotlike'%rdbms%';-利用Pl、P2的信息,找出等待事件的相关的段selectowner,segment_name,segment_type,tablespace_namefromdbaextentswherefile_id=&fileid_inand&blockidinbetweenblocki