1.查看控制文件大小
select v.*, round(block_size*file_size_blks/1024/1024, 2) MB from v$controlfile v;
select v.*, round(record_size*records_total/1024/1024, 2) MB from v$controlfile_record_section v order by MB desc;
select * from v$parameter where name = 'control_file_record_keep_time';
有些案例是因为keep time为1年,导致contolfile文件为几百MB, 可以从v$controlfile_record_section查询占用条目。
2.和正常时间点对比control file iostat
从异常时间点和正常时间点AWR中对比control file 相关evvent waits和IOStat by Filetype summary, 发现正常时1小时也有800多万次wait,但是平时AWR 控制文件读avg time为300 us, 所以判断问题时是I/O 比平时慢了。
3.分析I/O性能
看当时的iostat性能以及cpu性能(cpu枯竭也会影响io响应时间)
SELECT event, wait_time, p1, p2, p3
FROM gv$session_wait WHERE event LIKE '%control%';
查出p2(块号)
SELECT event,p1, p2,sql_id,count(*)
FROM gv$active_session_history WHERE event LIKE '%control%'
group by event,p1,p2,sql_id;
— 计算control file 676 block 40#在哪个AU上
(block#) 40 * (confile file block size) 16k/ (_asm_stripewidth) 128k=5. 第1条带的第5个AU 上,第1个128k.
AU AU ext0 AU ext1 AU ext2 AU ext3 AU ext4 AU ext5 AU ext6 AU ext7
DISK.AU 6.3 43.3 26.2 15.8 3.2 10.1 20.3 41.3
strips size 128k 128k 128k 128k 128k 128k 128k 128k
ctl block# 0-7 8-15 14-23 24-31 32-40
根据au查看具体的path磁盘(命令要在sysasm里跑)
col path for a30
col failgroup for a15
select a.file_number file#,a.name,x.xnum_kffxp extent#,a.group_number group#,d.disk_number disk#,au_kffxp au#, dg.allocation_unit_size au_size,
decode(x.lxn_kffxp,0,'PRIMARY',1,'MIRROR') TYPE, d.failgroup,d.path
from v$asm_alias a,x$kffxp x, v$asm_disk d, v$asm_diskgroup dg
where x.group_kffxp=a.group_number
and x.group_kffxp=dg.group_number
and x.group_kffxp=d.group_number
and x.disk_kffxp=d.disk_number
and x.number_kffxp=a.file_number
and lower(a.name)=lower('control01.ctl')
order by x.xnum_kffxp;
可能某个具体的磁盘性能耗完了
本文参考: