log file parallel write事件是只在LGWR进程上发生的等待事件。LGWR为了将重做缓冲区的内容记录到重做日志文件里,在执行必要的I/O调用后,在等待I/O工作结束期间等待log file parallel write事件。
SQL> select event#,name,parameter1,parameter2,parameter3 from v$event_name where name = 'log file parallel write';
EVENT# NAME PARAMETER1 PARAMETER2 PARAMETER3
---------- ------------------------------ --------------- --------------- ---------------
131 log file parallel write files blocks requests
这个等待事件包含三个参数。
files:操作需要写入的文件个数。
blocks:操作需要写入的数据块个数。
requests:操作需要执行的I/O次数。
log file parallel write等待,与db file parallel write等待属性基本类似。这两个等待从根本上与I/O系统性能问题关联较多。例如以下几个:I/O系统的性能不存在问题,但脏缓冲区的数据量过多时,db file parallel write等待可能增加。与此相同,I/O系统的性能上没有任何征兆,但重做数据量过多时,log file parallel write等待可能增加。这时的性能问题是过多创建数据的应用程序问题?还是无法以更快的速度处理数据的I/O系统问题?一般是从应用程序上寻找问题和解决方法,如果找不到更多的解决方法,就应该认为是I/O系统的问题。特别是从经济角度出发应该遵循这个方法。
解决log file parallel write等待的方法一般与log file sync 等待类似。两个等待事件都被LGWR的性能所左右。
减少不必要的提交。
应用nologging选项,减少重做数据量。
提高重做日志文件所在的I/O系统的性能。
前台进程a通知LGWR要刷log buffer了,这时候a就开始等待log file sync,LGWR接到a的请求后开始等待OS把log buffer写回redo log,这时候LGWR就开始等待log file parallel write,OS写完了通知LGWR,中止log file parallel write等待,接着LGWR通知a,中止log file sync等待,这就是上述两种等待的区别。
有上面这个形象的例子,可以明白等待事件log file sync和log file parallel write是同时存在的,均是等待LGWR进程将log buffer中的redo entries写入online redo log的完成。