当前位置:文档之家› 数据库性能监控

数据库性能监控

数据库性能监控1.纲要:数据库性能监控是一个常非大范围。

包含:表空间、段、索引、主键、数据缓冲区、库缓冲、用户锁、等待事件、回滚段、I/O、共享池等等。

(空间、索引、等待事件)2.概述:在日常生产系统中,我们的系统都使用相当长的时间,SGA 中重做日志缓存区的命中率,应该小于1%、高速缓存命中>=90%率等等一般都是正常的,当然一个非常低的命中率的确意味着系统配置或应用存在严重问题;非常高的缓存命中率存在严重低效率的SQL语句(极差的SQL造成%99以上的命中率), 但命中率的多少义意不是很大,主要是查看系统的等待事件,系统的反应时间,吞吐率(I/O)。

在系统的配置都没有问题情况下,影响性能的主要方面集中在:1、索引2、oracle、操作系统某些资源利用的不合理3、系统的等待事件3.索引要开始监控一个索引的使用,使用这个命令:ALTER INDEX pk_addr MONITORING USAGE;要停止监控一个索引,输入:ALTER INDEX pk_addr NOMONITORING USAGE;开始监控索引的使用之后,就可以在sys.v$object_usage视图中查到你所监控的索引的使用情况。

所有被使用过至少一次的索引都可以被监控并显示到这个视图中。

不过,一个用户只可以接收它自己schema中的索引使用。

Oracle并没有提供一个视图来接收所有模式中的索引。

4.oracle、操作系统某些资源利用的不合理内存分配不合理内存的利用率多于80%时,这时说明内存方面应该调节一下。

方法大体有以下几项:➢划给Oracle使用的内存不要超过系统内存的1/2,一般保在系统内存的40%为益。

➢为系统增加内存;➢如果你的连接特别多,可以使用MTS的方式;(MTS(Multi-Threaded Server)是ORACLE SERVER的一个可选的配置选择,是相对DEDICATE方式而言,它最大的优点是在以不用增加物理资源(内存)的前提下支持更多的并发的连接。

)➢打全补丁,防止内存漏洞。

表空间分配的不合理表空间不足的时候,系统前台根本无法使用。

回滚段空间的不足,持行脚本就回失败。

--监控表空间使用率与剩余空间大小的语句SELECT D.TABLESPACE_NAME,SPACE "空间(M)",BLOCKS ,SPACE-NVL(FREE_SPACE,0) "使用空间(M)",ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) "使用率(%)",FREE_SPACE "空闲空间(M)"FROM(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKSFROM DBA_DATA_FILESGROUP BY TABLESPACE_NAME) D,(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) FREE_SPACEFROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) FWHERE D.TABLESPACE_NAME = F.TABLESPACE_NAMEUNION ALLSELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,USED_SPACE "USED_SPACE(M)",ROUND(NVL(USED_SPACE,0)/SPACE*100,2) "USED_RATE(%)",NVL(FREE_SPACE,0) "FREE_SPACE(M)"FROM (SELECT TABLESPACE_NAME,ROUND(SUM(BYTES)/(1024*1024),2) SPACE,SUM(BLOCKS) BLOCKS FROM DBA_TEMP_FILESGROUP BY TABLESPACE_NAME) D,(SELECT TABLESPACE_NAME,ROUND(SUM(BYTES_USED)/(1024*1024),2) USED_SPACE, ROUND(SUM(BYTES_FREE)/(1024*1024),2) FREE_SPACEFROM V$TEMP_SPACE_HEADER GROUP BY TABLESPACE_NAME) FWHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME;5.系统的等待事件Oracle的等待事件是衡量Oracle运行状况的重要依据及指标。

在Oracle9i中大约有360个等待事件。

主要有两种类别的等待事件,即空闲(idle)等待事件和非空闲(non-idle)等待事件。

空闲事件指Oracle正等待某种工作,比如用sqlplus登录之后,但没有进一步发出任何命令,此时该session就处于SQL*Net message from/to client等待事件状态,等待用户发出命令,任何的在诊断和优化数据库的时候,我们不用过多注意这部分事件。

非空闲等待事件专门针对Oracle的活动,指数据库任务或应用运行过程中发生的等待,这些等待事件是我们在调整数据库的时候应该关注与研究的。

现在oracle优化都是基于等待事件的优化。

常用几个重要视图:。

V$session_wait 显示了系统的当前等待项v$system_event 则提供了自实例启动后各个等待事件的概括V$SESSION_EVENT 记录了每个session的每一项等待事件V$EVENT_NAME数据库实例所定义的所有等待事件(wait events)的名字的参考视图查看目前正在运行的语句和多长时间select a.sid, st_call_et ,b.sql_textfrom v$session a,v$sqltext bwhere ername is not nulland a.status = 'ACTIVE'and a.sql_address = b.addressorder by st_call_et,a.sid,b.piece;通过得到的超长运行SQL语句,分析他的持行计划(在PLSQL中使用F5)检查是否正常(可与其它地市做比较)。

如果是索引问题,直接删除索引后,重建就OK。

其它问题的分析,在得到超长时间的SID后,可以直接查询,会话等待表:查看指定SID的事件:select * from v$session_wait where sid=XX;查询当前正在等待的事件:详细情况:SELECT s.sid, ername, w.seq#, w.event, w.p1text, w.p1, w.p2text, w.p2, w.p3text, w.p3,w.seconds_in_wait, w.state, s.logon_time, s.osuser, s.programFROM v$session s, v$session_wait wWHERE s.sid = w.sidORDER BY w.event, w.seconds_in_wait;字段EVENT是找出性能问题的关键:1) rdbms ipc message 空闲事件timeout 超时等待2) SQL*Net message from client这个wait event从字面上看就是等待客户端过来的message,表明DB等待客户端传东西过来,就到此为止,没有指明其他的,假设client故意不传呢?只要客户端没有传message过来应该都是这个wait 网络不通畅网络问题可能会造成这个wait,但是有这个wait不一定都是因为网络问题3) buffer busy waits,free buffer waits这两个参数所标识是dbwr是否够用的问题,与IO很大相关的,当v$session_wait中的free buffer wait 的条目很小或没有时,说明系统的dbwr进程决对够用,不用调整;free buffer wait的条目很多,系统感觉起来一定很慢,这时说明dbwr已经不够用了,它产生的wio已经成为数据库性能的瓶颈,这时的解决办法如下:A、增加写进程,同时要调整db_block_lru_latches参数:示例:修改或添加如下两个参数db_writer_processes=4db_block_lru_latches=8B、开异步IO。

4) db file sequential read指的是顺序读,即全表扫描,这也是应尽量减少的部分,解决方法就是使用索引、sql调优,同时可以增大db_file_multiblock_read_count这个参数。

(db_file_multiblock_read_count:在一次大的表扫描中,最多一次IO 可以读取的数据块的数量.如果你经常有大表扫描,设大一点)5) db file scattered read参数指的是通过索引来读取,同样可以通过增加db_file_multiblock_read_count这个参数来提高性能。

另外event 的详细说明可以查询:select * from v$event_name a如果还是没弄懂就上GOOGLE吧。

6. 附件V$SESSION_W AITSID: session标识EVENT: session当前等待的事件,或者最后一次等待事件。

WAIT_TIME: session等待事件的时间(单位,百分之一秒)如果本列为0,说明当前session还未有任何等待。

SEQ#: session等待事件将触发其值自增长P1, P2, P3: 等待事件中等待的详细资料P1TEXT, P2TEXT, P3TEXT: 解释说明p1,p2,p3事件State字段有四种含义﹕Waiting:SESSION正等待这个事件。

Waited unknown time:由于设置了timed_statistics值为false,导致不能得到时间信息。

表示发生了等待,但时间很短。

Wait short time:表示发生了等待,但由于时间非常短不超过一个时间单位,所以没有记录。

Waited knnow time:如果session等待然后得到了所需资源,那么将从waiting进入本状态。

2.Wait_time值也有四种含义:值>0:最后一次等待时间(单位:10ms),当前未在等待状态。

相关主题