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