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의 크기가 적절한 크기가 되어야 하지만 적정 값은 정해져 있지 않으면 지속적인 모니터링을 통해서 조정 해야 합니다.
Ridiculous story there. What occurred after? Good luck!