与Redo日志IO相关的等待事件:
Redo日志活动期间会有很多的等待事件,而且他们大多是和IO相关的。最重要的两个就是‘log file sync’和‘log file parallel write’。
Oracle前台进程(或叫服务器进程)等待‘log file sync’事件,LGWR进程等待‘log file parallel write’。
尽管我们通常会从Statspack报告的“Top 5 Wait/Timed Events”节中看到‘log file sync’等待事件,为了理解这个等待事件的原因,我们首先看下‘log file parallel write’等待事件。
'log file parallel write'
当正在将日志记录从内存的日志缓冲区拷贝到当前磁盘的redo日志组成员的日志文件时,LGWR后台进程会等待这种等待事件。如果允许使用异步IO,那就可以并行执行写操作,否则这种写操作就不得不一个成员一个成员地按照顺序进行。
然而,LGWR不得不一直等待,直到这个等待事件完成之前,所有成员日志文件的IO操作完成。因此,决定等待时间长度的因
素是IO子系统执行日志文件成员写操作的速度。
为了减少这种等待事件的等待时间,一种方法就是降低数据库产生的redo日志量:
1. 充分使用UNRECOVERABLE/NOLOGGING选项。
2. 降低redo日志组成员的数量到最小,确保同一时刻不会丢失所有的日志文件组成员。
3. 不要不必要地让表空间处于BACKUP状态。
4. 若需要附加日志达到需要的功能,那么就使用最小等级,例如LogMiner,Logical Standby或Streams。
其它调优IO的方法:
1. 将redo日志组成员分散到不同的存储空间,以便使用并行写不会互相争用。
2. 不用让redo日志文件使用RAID-5。
3. 让redo日志文件使用裸设备。
4. 让redo日志文件使用更快的磁盘。
5. 如果正在使用归档,对当前redo日志组成员的写操作不会和正在进行归档的日志文件组读操作互相争用。
'log file sync'
当执行COMMIT或ROLLBACK操作时,Oracle前台进程会产生等待事件,等待操作的完成。部分(不是全部)这种等待事件会包含等待LGWR将session交易操作的redo日志内容从日志缓冲内存刷到磁盘。
所以,当一个前台进程正在等待‘log file sync时,LGWR也会花费一部分时间在‘log file parallel write’上。
理解‘log file syn’背后原理的关键就是对比‘log file syn’与‘log file parallel write’平均等待时间。
1. 如果这两个时间相差不多,那么redo日志文件IO就是造成这种延迟的原因,接下来需要对其进行调优。
2. 如果‘log file parallel write’显著地不同,例如比较小,那么延迟就是由产生于COMMIT/ROLLBACK(和IO无关)期间的Redo日志机制的其它部分导致。有时可能是redo闩的闩锁争用,这时会出现‘latch free’或‘LGWR wait for redo copy’等待事件。
'log file sequential read' and 'log file single write'
这两种等待时间都是和IO相关的,当出现redo日志的IO争用时,一般他们都和‘log file parallel write’一起出现。
'switch logfile command' ,'log file switch completion'和'log file switch (clearing log file)'
更多LGWR与IO相关的等待事件,可参考之前的方法调优。
'log file switch (checkpoint incomplete)'
当检查点活动未足够快地产生时,会有这种等待事件的产生。
'log switch/archive'和'log file switch (archiving needed)'
当归档模式打开,这种等待事件的产生表名归档操作执行没有足够快。
(未完待续)