Oracle Wait Event를 보다 보면 log file sync 이벤트가 많이 발생 합니다. 대표적인 경우가 몇 개 있습니다.
1. Redo Log File Size를 증가시킴으로 Log Switch 수치 감소
-> I/O 감소로 성능에 이점
2. SYS.AUDSES$ 시퀀스의 CACHE 값을 크게 조정하여 해결
-> 동시 접속 과다 시점에 Log File Sync 대기이벤트에 의한 Active Session의 급증 현상 발생 하는 경우
SYS.AUDSES$ 시퀀스의 CACHE Size가 작아서 SYS.SEQ$ 를 UPDATE하는 내부 SQL 수행 및
COMMIT 과다 발생으로 인한 지연 발생
SQL> alter sequence sys.audses$ cache 10000;
3. REDO Log 파일은 데이터 파일이나 TEMP 파일, SYSTEM 파일과 다른 디스크에 배치하여 I/O 분산
4. O/S I/O 관련 Parameter 수정
maxreqs (12288->24576)
maxservers (32->64) (kproc = maxservers*cpu count)
5. COMMIT_WRITE 명령에 의해 Redo Buffer를 Redo Log File에 기록하는 방식을 사용자가 제어 (10gR2부터 제공)
대기여부 WAIT 기존의 Commit과 같이 Redo Buffer가 Redo Log File에 기록을 완료 할 때 까지 Session은 대기함
NOWAIT Redo Buffer가 Redo Log File에 기록이 완료 시 까지 대기하지 않고 다른 작업을 수행할 수 있음
대기여부 IMMEDIATE Redo Log File에 쓰기 작업을 바로 바로 수행함
BATCH Redo Log File에 쓰기 작업을 Batch 형태로 몰아서 수행함
EX) SQL> alter system set commit_write=NOWAIT, BATCH
6. Redo Buffer의 크기가 지나치게 큰 경우에 log file sync 대기 증가 발생 가능
Redo Buffer의 크기가 지나치게 큰 경우 Commit을 수행할 때, LGWR 프로세스는 더 많은 양의 Redo Entry를 디스크에 기록해야 하므로 sync write 시간은 더 오래 소요.
log buffer space가 증가할 경우 Redo Buffer의 크기를 증가시키고 log file sync 대기가 증가 할 경우 Redo Buffer의 크기를 감소시켜야 한다.
따라서 Redo Buffer의 크기가 적절한 크기가 되어야 하지만 적정 값은 정해져 있지 않으면 지속적인 모니터링을 통해서 조정 해야 합니다.