37.读书笔记收获不止Oracle之常用诊断命令汇总
37.读书笔记收获不止Oracle之常用诊断命令汇总 1. Oracle获取基线Baseline ,叫做基线,用于比较的基本线。因为Baseline中包含指定时间点时的性能数据,因此就可以用来与其它时间点时的状态数据做对比,以分析性能问题。 创建Baseline时,Snapshots是做为其中的一个组成部分存在,因此一般来说当AWR自动维护快照时,如果定义过baseline,与baseline相关的快照不会被删除,即使是过期的快照,这样就相当于手动保留了一份统计数据的历史信息,DBA可以在适当的时间将其与现有的快照进行对比,以生成相关的统计报表。 用户可以通过DBMS_WORKLOAD_REPOSITORY包中的相关过程,手动的创建或删除Baseline。 查看快照: SQL> select snap_id from dba_hist_snapshot; 创建快照: SQL>execdbms_workload_repository.create_snapshot(); 创建BASELINE exec dbms_workload_repository.create_baseline (31,32,'testbase_1') 查看BASELINE SQL>selectdbid,baseline_name,start_snap_id,end_snap_idfromdba_hist_baseline; 删除BASELINE ExecDBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name => 'testbase_1',cascade => false); 删除时指定了cascade参数值为true,对应的snap也被级联删除了。 DBA也可以直接查询动态性能视图(或相关数据字典)的方式来获取自己想要的那部分性能数据。ORACLE将这部分性能统计数据保存在DBA_HIST开头的数据字典中,要查询当前实例所有能够访问的DBA_HIST字典,可以通过下列语句: Col table_name format a30 Col comments format a30 SQL>select * from dict where table_name like 'DBA_HIST%'; 2. 数据监控2.1 查看表锁select* fromsys.v_$sqlareawheredisk_reads>100 / 2.2监控实例的等待selectevent,sum(decode(wait_Time,1))"Prev", sum(decode(wait_Time,1,0))"Curr",count(*) "Tot" fromv$session_Wait groupbyeventorderby4 / 2.3回滚段的争用情况selectname,waits,gets,waits/gets "Ratio" fromv$rollstat a,v$rollname b wherea.usn = b.usn / 2.4数据表占用空间大小情况selectsegment_name,tablespace_name,bytes,blocks fromuser_segments wheresegment_type='TABLE' ORDERBYbytes DESC,blocksDESC / 2.5查看表空间碎片大小selecttablespace_name,round(sqrt(max(blocks)/sum(blocks))* (100/sqrt(sqrt(count(blocks)))),2)FSFI fromdba_free_space groupbytablespace_nameorderby1 / 2.6查看表空间占用磁盘情况select b.file_id, b.tablespace_name, b.bytes, (b.bytes-sum(nvl(a.bytes,0))), sum(nvl(a.bytes,0)),0))/(b.bytes)*100 fromdba_free_spacea,dba_data_files b wherea.file_id=b.file_id groupbyb.tablespace_name,b.file_id,b.bytes orderbyb.file_id / 2.7查看session使用回滚段SELECTr.name, s.sid, s.serial#, s.username, t.status, t.cr_get, t.phy_io, t.used_ublk, t.noundo, substr(s.program,78) FROMsys.v_$sessions,sys.v_$transactiont,sys.v_$rollname r WHEREt.addr = s.taddrandt.xidusn = r.usn ORDERBYt.cr_get,t.phy_io / 2.8监控表空间I/O比例selectdf.tablespace_namename,df.file_name "file",f.phyrds pyr, f.phyblkrdpbr,f.phywrts pyw,f.phyblkwrt pbw fromv$filestat f,dba_data_files df wheref.file# = df.file_id orderbydf.tablespace_name / 2.9监控SGA命中率selecta.value + b.value"logical_reads", c.value"phys_reads", round(100* ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO" fromv$sysstat a,v$sysstat b,v$sysstat c wherea.statistic# = 38 and b.statistic#= 39 and c.statistic#= 40 / 2.10监控 SGA 中字典缓冲区的命中率selectparameter,Getmisses,getmisses/(gets+getmisses)*100 "miss ratio", (1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100"Hit ratio" fromv$rowcache wheregets+getmisses <>0 groupbyparameter,getmisses / 2.11监控 SGA 中共享缓存区的命中率,应该小于1%selectsum(pins) "TotalPins",sum(reloads) "Total Reloads", sum(reloads)/sum(pins) *100 libcache fromv$librarycache / 2.12监控 SGA 中重做日志缓存区的命中率,应该小于1%SELECTname,misses,immediate_gets,immediate_misses, Decode(gets,misses/gets*100) ratio1, Decode(immediate_gets+immediate_misses, immediate_misses/(immediate_gets+immediate_misses)*100)ratio2 FROMv$latchWHEREnameIN('redo allocation','redo copy') / 2.13监控内存和硬盘的排序比率,最好使它小于 .10SELECTname,value FROMv$sysstat WHEREnameIN('sorts(memory)','sorts (disk)') / 2.14监控字典缓冲区SELECTSUM(GETS)"DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GETMISSES" FROMV$ROWCACHE / 2.15非系统用户建在SYSTEM表空间中的表SELECTowner,table_name FROMDBA_TABLES WHEREtablespace_namein('SYSTEM','USER_DATA') AND ownerNOTIN('SYSTEM','SYS','OUTLN','ORDSYS','MDSYS','SCOTT','HOSTEAC') / 2.16性能最差的SQLSELECT* FROM(SELECTPARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROMv$sqlarea ORDERBYdisk_readsDESC) WHEREROWNUM<100 / 2.17读磁盘数超100次的sqlselect*fromsys.v_$sqlarea wheredisk_reads>100 / 2.18最频繁执行的sqlselect*fromsys.v_$sqlarea whereexecutions>100 / 2.19查询使用CPU多的用户sessionselecta.sid,spid,status,substr(a.program,40)prog,a.terminal,osuser,value/60/100 value fromv$session a,v$process b,v$sesstatc wherec.statistic#=12 and c.sid=a.sidand a.paddr=b.addr orderbyvalue desc / 2.20当前每个会话使用的对象数SELECTa.sid,s.terminal,s.program,count(a.sid) FROMV$ACCESS a,V$SESSION s WHEREa.owner <>'SYS'ANDs.sid = a.sid GROUPBYa.sid,s.program ORDERBYcount(a.sid) / 3. 命名规范命名规范如下图1 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |