본문 바로가기

카테고리 없음

ORACLE 11g Troubleshooting - log file sync Waits v1.0

ORACLE 11g Troubleshooting - log file sync Waits v1.0

 

Date

Ver

Etc.

13.05.08

v1.0

 

 

 

 

 

 

 

 

 

l  메타링크 문서 ID 1376916.1 를 번역 했음을 알립니다.

1.   What is a ‘log file sync’ wait?

User commit 이 발생하면 session redo 정보는 메모리에서 redo logfile 로 씌어져야 한다.

 

커밋 시점에, 유저 세션은 LGWR 에게 log buffer redo log file 에 쓰도록 지시한다.

LGWR 가 쓰기를 마치면, 이를 user session 에 알린다. LGWR 가 쓰기를 마치고 redo changes

전부 디스크에 안전하게 쓰여졌음을 확인하고 알리기까지 user session ‘log file sync’ 를 대기한다

 

2.   What should be collected for initial diagnosis of ‘log file sync’ waits?

l  비교를 위해 비슷한 기간, 시기의 log file sync 가 발생하지 않은 AWR report

l  log file sync 가 발생했을 때의 AWR report

l  LGWR trace file

LGWR trace file ‘log file parallel wait’ 가 높을 때 경고메시지를 보여준다.

 

3.   What causes high waits for ‘log file sync’?

‘log file sync’ 이벤트는 user process LGWR 에게 redo information 을 쓰도록 보고 할 때와 LGWR

redo log buffer disk 에 쓴 다음 user process 에게 보고할 때 그리고 user process 가 대기에서

빠져나올 때 발생할 수 있다.

 

4.  Issues affecting LGWR’s IO performance

-      Compare the average wait time for ‘log file sync’ to the average wait time for ‘log file parallel write’

‘log file parallel’ write redo 에 대한 실제 쓰기연산이 일어날 때 LGWR 가 대기하는 wait event 이다.

 

만약 ‘log file parallel write’ 시간에 대해 ‘log file sync 시간의 비율이 높다면, 대부분의 대기시간은 IO 때문이다.

( log file parallel write 시간이 더 길다면) 20 millisecond 이상이 걸린다면 IO subsystem 을 확인한다.

 

Recommendations

빠른 I/O 장치를 사용. 반면 메타링크에서는 SSD 를 쓰지 말라 한다.

(log file sync 에 대한 내구력 때문, 문제가 심화되는 걸 깨닫지 못하기 때문? 이라는 뉘앙스)

다른 프로세스가 redo log 가 위치한 디바이스의 I/O 자원을 사용하는지 확인

log_buffer 가 너무 크지 않은지 확인한다. 너무 큰 log_buffer flush 가 발생했을 때

wait 가 길어지는 역효과를 가진다.

 

-      Check LGWR Traces

‘log file parallel write’ 평균 시간이 정상 범주의 짧은 시간이라더라도, Write time peak 가 있을것이고,

이로인해 ‘log file sync’ 에 영향을 줄 수 있다. 10.2.0.4 부터 log file 에 대한 쓰기가 500ms 를 넘으면

LGWR trace 에 메시지가 쓰인다. 이는 상당히 높은 임계치로 메시지가 적다 해서 문제가 없다는 걸

의미하는 것은 아니다.

 

-      Check to see if redo logs are large enough

‘log file sync’  redo logs 가 다음의 log 로 변경될 때 next log 가 시작되기 전에 모든 것이 쓰여졌는지

확인하기 위해 매번 수행된다.표준 권고는 많더라도 15~20 분에 한번 스위칭하는 것이다.

만약 이보다 더 많이 스위칭이 일어난다면, 더 많은 ‘log file sync’ 더 많이 일어나고 개별 세션에 대해

더 대기한다는 것을 의미한다.

 

5.   Excessive Application Commits

과도한 commit ‘log file sync’ 를 유발하는 log buffer 로부터 redo logs 로의 redo flush 를 일으킨다.

 

높은 commit rate 를 식별하기 위해서는, ‘log file sync’ 에 대한 평균 대기시간이 ‘log file parallel write’ 에 대한 대기시간보다

훨씬 큰 경우로, 이는 많은 시간을 redo 가 쓰여지길 대기하기 때문으로 IO 로 인한 문제가 아니라는 것이다.

 

추가적으로 ‘log file sync’ 를 대기하는 평균 시간이 낮지만, 대기횟수가 높은경우, 이는 application 이 너무

빈번히 commit 함을 의미한다.

 

-      Compare the average user commits and user rollbacks to user calls

user calls / (user commits + user rollbacks) 30보다 작으면 commit 이 빈번하다는 것을 의미한다.

 

6.   Adaptive Log File Sync

11.2 에서 소개 된 기능으로, _use_adaptive_log_file_sync 를 사용해 기능을 컨트롤한다. 11.2.0.1 11.2.0.2 에서는

기본값을 false 로 가져가나, 11.2.0.3 에서는 default 값이 true 이다.

 

기능이 활성화 되어 있으면 ORACLE 은 두 가지 메소드에서 스위칭할 수 있다.

 

l  Post/wait, redo log 에 대한 쓰기가 완료되었음을 알리는 기존의 방식

LGWR 가 명시적으로 commit 이 완료되기를 기다리는 모든 프로세스에게 알림

l  Polling, Foreground process LGWR 가 쓰기를 마쳤음을 체크하는 새로운 방법

Foreground processes sleep and poll to see if the commit is complete.

이 방식의 장점은 LGWR commit 의 완료를 기다리는 많은 프로세스에 대한 알림으로부터 자유로워진다는 것이다.

 

기본적으로 LGWR Post/wait 를 사용하면서 알고리즘에 의해 polling 이 나은지를 판단한다. 높은 로드에서는

Polling 방식이 더 나은 성능을 보일 수 있다. 왜냐하면 Post/wait scale(확장, 규모) 이 어렵기 때문이다.

반대로 로드가 낮은 상황이라면 post/wait 가 더 나은 성능을 보이며 polling 보다 더 나은 응답속도를 보여준다.

Oracle 은 내부 통계정보에 의해 어떤 방법이 더 나은지 판단한다.

7.   References

a.    Troubleshooting : “log file sync” Waits [ID 1376916.1]

b.    Waits for “log file sync” with Adaptive Polling vs Post/Wait Choice Enabled [ID 1541136.1]