27396/1: 17.0781 semctl(9, 15, SETVAL, 1) = 0
..
27396/1: 17.0789 semtimedop(9, 0xFFFFFD7FFFDFC128, 1, 0xFFFFFD7FFFDFBF68) = 0
27396/1: semnum=118 semop=-1 semflg=0
27396/1: timeout: 1.000000000 sec
3. Waiting log writer gets a 0 return code from semtimedop and writes redo records to current redo log
file. kaio calls are kernalized asynchronous I/O calls in Solaris platform.
22459/7: 0.2894 0.0007 0.0001 pwrite(262, "01 "\0\09E0E\0\0 i ?\0\0".., 1024, 1915904) = 1024
22459/9: 0.2894 0.0006 0.0001 pwrite(263, "01 "\0\09E0E\0\0 i ?\0\0".., 1024, 1915904) = 1024
22459/1: 0.2895 0.0007 0.0000 kaio(AIOWAIT, 0xFFFFFD7FFFDFE310) = 1
22459/1: timeout: 600.000000 sec
22459/9: 0.2895 0.0001 0.0000 kaio(AIONOTIFY, 0) = 0
22459/7: 0.2895 0.0001 0.0000 kaio(AIONOTIFY, 0) = 0
4. After successful completion of write(s), LGWR Posts semaphore of waiting process using semctl
command.
22459/1: 0.2897 0.0002 0.0000 semctl(9, 118, SETVAL, 1) = 0
5. User process/Session continues after recieving a return code from semtimedop call, reprinted below.
27396/1: 17.0789 semtimedop(9, 0xFFFFFD7FFFDFC128, 1, 0xFFFFFD7FFFDFBF68) = 0
So, what exactly is 'log file sync' wait ?
Commit is not complete until LGWR writes log buffers including commit redo recods to log files. In a
nutshell, after posting LGWR to write, user or background processes waits for LGWR to signal back
with 1 sec timeout. User process charges this wait time as 'log file sync' event.
In the prior section, 'log file sync' waits starts at step 2 after semctl call and completes after step 5
above.
Root causes of 'log file sync' waits
Root causes of 'log file sync', essentially boils down to few scenarios and following is not an
exhaustive list, by any means!
1. LGWR is unable to complete writes fast enough for one of the following reasons:
a. Disk I/O performance to log files is not good enough. Even though LGWR can use
asynchronous I/O, redo log files are opened with DSYNC flag and buffers must be
flushed to the disk (or at least, written to disk array cache in the case of SAN) before
LGWR can mark commit as complete.
b. LGWR is starving for CPU resource. If the server is very busy, then LGWR can starve
for CPU too. This will lead to slower response from LGWR, increasing 'log file sync'
waits. After all, these system calls and I/O calls must use CPU. In this case, 'log file
sync' is a secondary symptom and resolving root cause for high CPU usage will reduce
'log file sync' waits.
c. Due to memory starvation issues, LGWR can be paged out. This can lead to slower
评论