关于Redo的内容,有两个概念:1、改变向量(Redo Vector);2、重做记录(Redo Record)
Redo主要通过三个组件完成:Redo Log Buffer、LGWR和Redo Log File
获得Redo产生数量的三个途径:
1、在SQL*Plus中使用autotrace功能时。执行特定的DML语句,Oracle会显示该语句的统计信息。其中,
redosize标识该操作产生的Redo的数量:set autotrace trace stat
2、通过v$mystat查询:通过v$mystat视图记录当前session的统计信息
select a.name,b.value
from v$statname a ,v$mystat b
where a.statistic#=b.statistic# and a.name='redo size';
3、通过v$sysstat查询数据库全局的Redo生成量。
select name,value/1024/1024/1024 GB from v$sysstat where name = 'redo size';
对于归档日志的生成量,可以通过v$archived_log视图来估算:
select name,completion_time,blocks*block_size/1024/1024 MB
from v$archived_log where rownum < 11
and completion_time between trunc(sysdate)- 2 and trunc(sysdate)-1
Redo写的触发条件:
1、每3秒超时(Timeout):可启动10046事件从LGWR跟踪日志中看到这些事件。
2、阈值达到:Redo Log Buffer 1/3满或Redo Log Buffer 具有1MB脏数据。
Redo Log Buffer大小:Max(512KB,128KB*CPU_COUNT)
Log_buffer是否需要调整,可以从数据库的等待事件来判断:
select event#,name from v$event_name where name = 'log buffer space';
log file 的四种状态:current、active、inactive和unused
active意味着检查点尚未完成,如果日志文件循环使用再次到达该文件,数据库将处于等待状态,alert
文件中可以看到,通过v$session_wait里也能看到。
推算Redo Block的大小:
select name,value from v$sysstat where name in ('redo size','redo wastage','redo blocks
written')
redo size : redo 信息的大小
redo wastage:浪费的redo的大小
redo blocks written:LGWR写出的redo block的数量
Redo Block的大小:ceil(16+('redo size' + 'redo wastage')/'redo blocks written')
当然,还可以通过转储日志文件来获得日志文件块大小:
alter session set events 'immediate trace name redohdr level 10';
(注意看bsz部分)
引起Checkpoint incomplete可能的原因:
1、日志文件过小,切换过于频繁;
2、日志组太少,不能满足正常事务量的需要;
3、日志文件所在磁盘IO存在瓶颈,导致写出缓慢,阻塞数据库正常运行;
4、由于数据文件磁盘IO瓶颈,DBWR写出过于缓慢;
5、由于事务量大,DBWR负荷过高,不堪重负;
解决办法:
1、适当增加日志文件大小;
2、适当增加日志组数量;
3、使用更快的磁盘;
4、改善磁盘IO性能;
5、使用多个DBWR进程或使用异步IO等
from http://blog.sina.com.cn/s/blog_3eb222740100itnz.html
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14844492/viewspace-1051612/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14844492/viewspace-1051612/