1. Event 정의

1) 정의
  • 서버 프로세스가 Commit 또는 Rollback을 수행한 후, LGWR 프로세스가 관련 Redo Record를 Redo Buffer에서 Redo Log File로 기록할 때까지 대기하는 이벤트
p1buffer#
p2N/A
p3N/A
2) 대기발생 사유
  • log file sync 대기는 Transaction 완료와 관련되어 있음(Commit, Rollback)
  • 과다한 log file sync 대기시간은 Commit요청이 과다하게 발생된다는 것을 의미
    ☞ Commit을 과다하게 발생하는 것이 log file sync 대기의 가장 대표적인 원인이다.
    ☞ 만일 세션이 오랜 시간 log file sync 대기이벤트를 대기한다면, 해당 세션이 배치 프로세스인지, OLTP 프로세스인지 또는 미들티어(Tuxedo, Weblogic 등)와 같은 영구 커넥션(persistent connection)인지 확인해야 한다.
    ☞ 만일 세션이 배치 프로세스라면, 루프 내에서 반복적으로 Commit을 수행할 수 있다.
    ☞ 이 경우 모듈의 이름을 확인한 후 Commit의 횟수를 줄일 수 있는지를 점검하기 위해서 개발자에게 코드를 점검하라고 요청해야 한다.
    ☞ 이것은 어플리케이션 이슈이며, 해결 방안은 단순히 불필요한 Commit을 제거하여 전체적인 Commit 발생률을 줄이는 것이다.
    ☞ 일반적인 경우 Commit을 한번 수행할 때마다 한번의 log file sync 대기가 발생한다.
    ☞ 따라서 여러 세션에서 동시에 대량의 Commit을 수행하면 log file sync 대기가 광범위하게 나타날 수 있다.
  • Redo Log I/O 성능 저하 시 log file sync 대기 증가 가능
    ☞ 리두 로그 파일이 위치한 I/O 시스템의 성능이 느린 경우 LGWR의 sync write를 수행하는 시간이 늘어나고 이로 인해 log file sync 대기시간이 증가
  • 리두 버퍼 크기와 log file sync
    ☞ 일반적으로 리두 버퍼의 크기가 큰 경우 LGWR에 의한 백그라운 기롯 횟수는 줄어들지만, 기록해야 할 데이터의 양이 많아지므로 log file sync 대기시간 증가

2. log file sync 테스트

1) log file sync 대기이벤트는 commit 회수만큼 비례해서 증가함

-- 1. 현재 log file sync 값 확인 
SELECT EVENT,
       TOTAL_WAITS,
       TIME_WAITED
FROM   V$SESSION_EVENT
WHERE  SID = (SELECT SID
              FROM   V$MYSTAT
              WHERE  ROWNUM = 1)
AND    EVENT = 'log file sync';

EVENT                          TOTAL_WAITS TIME_WAITED
------------------------------ ----------- -----------
log file sync                            4           3

-- 2. UPDATE 한건 수행 후 COMMIT하고 log file sync 값 확인
UPDATE REDO_TEST
SET    ID = 1
WHERE  ROWNUM = 1;
COMMIT;

SELECT EVENT,
       TOTAL_WAITS,
       TIME_WAITED
FROM   V$SESSION_EVENT
WHERE  SID = (SELECT SID
              FROM   V$MYSTAT
              WHERE  ROWNUM = 1)
AND    EVENT = 'log file sync';

EVENT                          TOTAL_WAITS TIME_WAITED
------------------------------ ----------- -----------
log file sync                            5           4

-- 3. UPDATE 한건 수행 후 COMMIT하고 log file sync 값 확인
UPDATE REDO_TEST
SET    ID = 1
WHERE  ROWNUM = 1;
COMMIT;

SELECT EVENT,
       TOTAL_WAITS,
       TIME_WAITED
FROM   V$SESSION_EVENT
WHERE  SID = (SELECT SID
              FROM   V$MYSTAT
              WHERE  ROWNUM = 1)
AND    EVENT = 'log file sync';

EVENT                          TOTAL_WAITS TIME_WAITED
------------------------------ ----------- -----------
log file sync                            6           5

3. 해결방법

1) Commit 회수의 감소
  • 일반적인 경우 커밋을 한번 수행할 때 마다 한 번의 log file sync 대기가 발생함
  • 잦은 커밋이 문제가 되는 경우 그룹 커밋을 권장함
2) Redo Log 쓰기 속도 개선
  • RAID5 보다는 RAID1 + 0 사용
  • Raw Device 사용
    ☞ 로우 디바이스는 파일 시스템 운영에서와 달리 OS 버퍼를 토하지 않고도 직접 디스크 쓰기 수행이 가능함
    ☞ inode등 자유 공간 정보 관리를 위한 부담이 없으므로, 일반적으로 파일 시스템보다 I/O 속도가 우수함
    ☞ 대부분의 OPS 환경에서 데이터 파일과 같은 공용 파일의 저장 장소로 도우 디바이스의 사용 요구됨

문서에 대하여