37.读书笔记收获不止Oracle之常用诊断命令汇总

前端之家收集整理的这篇文章主要介绍了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监控内存和硬盘的排序比率,最好使它小于 .10

SELECTname,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性能最差的sql

SELECT* FROM(SELECTPARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text

FROMv$sqlarea

ORDERBYdisk_readsDESC)

WHEREROWNUM<100

/

2.17读磁盘数超100次的sql

select*fromsys.v_$sqlarea wheredisk_reads>100

/

2.18最频繁执行的sql

select*fromsys.v_$sqlarea whereexecutions>100

/

2.19查询使用cpu多的用户session

selecta.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

原文链接:https://www.f2er.com/oracle/207041.html

猜你在找的Oracle相关文章