37.读书笔记收获不止Oracle之常用诊断命令汇总
2017-11-06 18:18
393 查看
37.读书笔记收获不止Oracle之常用诊断命令汇总
创建Baseline时,Snapshots是做为其中的一个组成部分存在,因此一般来说当AWR自动维护快照时,如果定义过baseline,与baseline相关的快照不会被删除,即使是过期的快照,这样就相当于手动保留了一份统计数据的历史信息,DBA可以在适当的时间将其与现有的快照进行对比,以生成相关的统计报表。
用户可以通过DBMS_WORKLOAD_REPOSITORY包中的相关过程,手动的创建或删除Baseline。
查看快照:
SQL> select snap_id from dba_hist_snapshot;
创建快照:
SQL> exec dbms_workload_repository.create_snapshot();
创建BASELINE
exec dbms_workload_repository.create_baseline (31,32,'testbase_1')
查看BASELINE
SQL> select dbid,baseline_name,start_snap_id,end_snap_id from dba_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%';
/
sum(decode(wait_Time,0,1,0))"Curr",count(*) "Tot"
from v$session_Wait
group by eventorder by 4
/
from v$rollstat a, v$rollname b
where a.usn = b.usn
/
from user_segments
where segment_type='TABLE'
ORDER BY bytes DESC ,blocksDESC
/
(100/sqrt(sqrt(count(blocks)))),2)FSFI
from dba_free_space
group by tablespace_nameorder by 1
/
b.file_id ,
b.tablespace_name ,
b.bytes ,
(b.bytes-sum(nvl(a.bytes,0))) ,
sum(nvl(a.bytes,0)) ,
sum(nvl(a.bytes,0))/(b.bytes)*100
from dba_free_spacea,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.bytes
order by b.file_id
/
s.sid,
s.serial#,
s.username,
t.status,
t.cr_get,
t.phy_io,
t.used_ublk,
t.noundo,
substr(s.program,1, 78)
FROM sys.v_$sessions,sys.v_$transaction t,sys.v_$rollname r
WHERE t.addr = s.taddrand t.xidusn = r.usn
ORDER BY t.cr_get,t.phy_io
/
f.phyblkrdpbr,f.phywrts pyw, f.phyblkwrt pbw
from v$filestat f, dba_data_files df
where f.file# = df.file_id
order by df.tablespace_name
/
c.value"phys_reads",
round(100* ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO"
from v$sysstat a, v$sysstat b,v$sysstat c
where a.statistic# = 38 and
b.statistic#= 39 and
c.statistic#= 40
/
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100"Hit ratio"
from v$rowcache
where gets+getmisses <>0
group by parameter, gets,getmisses
/
sum(reloads)/sum(pins) *100 libcache
from v$librarycache
/
Decode(gets,0,0,misses/gets*100) ratio1,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100)ratio2
FROM v$latchWHERE name IN ('redo allocation', 'redo copy')
/
FROM v$sysstat
WHERE name IN ('sorts(memory)', 'sorts (disk)')
/
FROM V$ROWCACHE
/
FROM DBA_TABLES
WHERE tablespace_namein('SYSTEM','USER_DATA') AND
ownerNOT IN('SYSTEM','SYS','OUTLN', 'ORDSYS','MDSYS','SCOTT', 'HOSTEAC')
/
FROM v$sqlarea
ORDER BY disk_readsDESC)
WHERE ROWNUM<100
/
/
/
from v$session a,v$process b,v$sesstatc
where c.statistic#=12 and
c.sid=a.sidand
a.paddr=b.addr
order by value desc
/
FROM V$ACCESS a,V$SESSION s
WHERE a.owner <>'SYS'AND s.sid = a.sid
GROUP BY a.sid,s.terminal,s.program
ORDER BY count(a.sid)
/
1. Oracle获取基线
Baseline ,叫做基线,用于比较的基本线。因为Baseline中包含指定时间点时的性能数据,因此就可以用来与其它时间点时的状态数据做对比,以分析性能问题。创建Baseline时,Snapshots是做为其中的一个组成部分存在,因此一般来说当AWR自动维护快照时,如果定义过baseline,与baseline相关的快照不会被删除,即使是过期的快照,这样就相当于手动保留了一份统计数据的历史信息,DBA可以在适当的时间将其与现有的快照进行对比,以生成相关的统计报表。
用户可以通过DBMS_WORKLOAD_REPOSITORY包中的相关过程,手动的创建或删除Baseline。
查看快照:
SQL> select snap_id from dba_hist_snapshot;
创建快照:
SQL> exec dbms_workload_repository.create_snapshot();
创建BASELINE
exec dbms_workload_repository.create_baseline (31,32,'testbase_1')
查看BASELINE
SQL> select dbid,baseline_name,start_snap_id,end_snap_id from dba_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 * from sys.v_$sqlareawhere disk_reads>100/
2.2 监控实例的等待
select event,sum(decode(wait_Time,0,0,1))"Prev",sum(decode(wait_Time,0,1,0))"Curr",count(*) "Tot"
from v$session_Wait
group by eventorder by 4
/
2.3 回滚段的争用情况
select name, waits, gets,waits/gets "Ratio"from v$rollstat a, v$rollname b
where a.usn = b.usn
/
2.4 数据表占用空间大小情况
select segment_name,tablespace_name,bytes,blocksfrom user_segments
where segment_type='TABLE'
ORDER BY bytes DESC ,blocksDESC
/
2.5 查看表空间碎片大小
select tablespace_name,round(sqrt(max(blocks)/sum(blocks))*(100/sqrt(sqrt(count(blocks)))),2)FSFI
from dba_free_space
group by tablespace_nameorder by 1
/
2.6 查看表空间占用磁盘情况
selectb.file_id ,
b.tablespace_name ,
b.bytes ,
(b.bytes-sum(nvl(a.bytes,0))) ,
sum(nvl(a.bytes,0)) ,
sum(nvl(a.bytes,0))/(b.bytes)*100
from dba_free_spacea,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.bytes
order by b.file_id
/
2.7 查看session使用回滚段
SELECT r.name ,s.sid,
s.serial#,
s.username,
t.status,
t.cr_get,
t.phy_io,
t.used_ublk,
t.noundo,
substr(s.program,1, 78)
FROM sys.v_$sessions,sys.v_$transaction t,sys.v_$rollname r
WHERE t.addr = s.taddrand t.xidusn = r.usn
ORDER BY t.cr_get,t.phy_io
/
2.8 监控表空间I/O比例
select df.tablespace_namename,df.file_name "file",f.phyrds pyr,f.phyblkrdpbr,f.phywrts pyw, f.phyblkwrt pbw
from v$filestat f, dba_data_files df
where f.file# = df.file_id
order by df.tablespace_name
/
2.9 监控SGA命中率
select a.value + b.value"logical_reads",c.value"phys_reads",
round(100* ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO"
from v$sysstat a, v$sysstat b,v$sysstat c
where a.statistic# = 38 and
b.statistic#= 39 and
c.statistic#= 40
/
2.10 监控 SGA 中字典缓冲区的命中率
select parameter, gets,Getmisses, getmisses/(gets+getmisses)*100 "miss ratio",(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100"Hit ratio"
from v$rowcache
where gets+getmisses <>0
group by parameter, gets,getmisses
/
2.11 监控 SGA 中共享缓存区的命中率,应该小于1%
select sum(pins) "TotalPins", sum(reloads) "Total Reloads",sum(reloads)/sum(pins) *100 libcache
from v$librarycache
/
2.12 监控 SGA 中重做日志缓存区的命中率,应该小于1%
SELECT name, gets, misses,immediate_gets, immediate_misses,Decode(gets,0,0,misses/gets*100) ratio1,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100)ratio2
FROM v$latchWHERE name IN ('redo allocation', 'redo copy')
/
2.13 监控内存和硬盘的排序比率,最好使它小于 .10
SELECT name, valueFROM v$sysstat
WHERE name IN ('sorts(memory)', 'sorts (disk)')
/
2.14 监控字典缓冲区
SELECT SUM(GETS)"DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GETMISSES"FROM V$ROWCACHE
/
2.15 非系统用户建在SYSTEM表空间中的表
SELECT owner,table_nameFROM DBA_TABLES
WHERE tablespace_namein('SYSTEM','USER_DATA') AND
ownerNOT IN('SYSTEM','SYS','OUTLN', 'ORDSYS','MDSYS','SCOTT', 'HOSTEAC')
/
2.16 性能最差的SQL
SELECT * FROM (SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_textFROM v$sqlarea
ORDER BY disk_readsDESC)
WHERE ROWNUM<100
/
2.17 读磁盘数超100次的sql
select *from sys.v_$sqlarea where disk_reads>100/
2.18 最频繁执行的sql
select *from sys.v_$sqlarea where executions>100/
2.19 查询使用CPU多的用户session
select a.sid,spid,status,substr(a.program,1,40)prog,a.terminal,osuser,value/60/100 valuefrom v$session a,v$process b,v$sesstatc
where c.statistic#=12 and
c.sid=a.sidand
a.paddr=b.addr
order by value desc
/
2.20 当前每个会话使用的对象数
SELECT a.sid,s.terminal,s.program,count(a.sid)FROM V$ACCESS a,V$SESSION s
WHERE a.owner <>'SYS'AND s.sid = a.sid
GROUP BY a.sid,s.terminal,s.program
ORDER BY count(a.sid)
/
3. 命名规范
命名规范如下图1相关文章推荐
- 5.读书笔记收获不止Oracle之 插入表性能示例
- 20.读书笔记收获不止Oracle之 索引回表和优化
- 36.读书笔记收获不止Oracle之表哈希、合并排序连接与索引
- Oracle 常用命令大汇总
- Oracle 常用命令大汇总
- 21.读书笔记收获不止Oracle之 索引回表效率
- 【读书笔记】【收获,不止Oracle】不同类型下表连接限制的对比
- 6.读书笔记收获不止Oracle之 逻辑体系
- 22.读书笔记收获不止Oracle之 索引特性活用
- ASM_Oracle ASM的常用命令(汇总)
- ORACLE常用命令汇总一;
- Oracle常用命令大汇总编辑词条编辑摘要
- 7.读书笔记收获不止Oracle之 逻辑体系二 深入与调整
- 【读书笔记】【收获,不止Oracle】嵌套循环表(Nested Loops Join)
- 23.读书笔记收获不止Oracle之 组合索引
- oracle常用命令汇总
- 24.读书笔记收获不止Oracle之 索引的危害
- 【读书笔记】【收获,不止Oracle】嵌套循环与索引
- 25.读书笔记收获不止Oracle之 位图索引
- 整理汇总Oracle常用命令 方便你我他