오라클에서 대용량으로 insert를 하고 있는데 데이터베이스의 트랜잭션 처리 속도가 갑자기 느려지며 서비스 지연이 발생했는데 이때 log file sync 이벤트가 대거 발생했습니다.
데이터의 변경사항은 redo log buffer에 저장됩니다. 트랜잭션을 커밋할 때 Oracle은 LGWR(Log Writer) 프로세스를 통해 Redo Buffer의 변경 이력을 디스크(Redo Log File)에 기록합니다.
사용자가 COMMIT 또는 ROLLBACK을 수행하면, Server Process는 LGWR에게 flush 요청을 보냅니다.
LGWR는 Redo Buffer를 Redo Log File로 기록하고, 기록이 완료되기 전까지 Server Process는 대기하게 되는데, 이 대기 이벤트가 log file sync입니다.
log file parallel write 이벤트는 오직 LGWR(Log Writer) 프로세스에서 발생하는 대기 이벤트입니다. LGWR는 Redo Buffer에 저장된 데이터를 Redo Log 파일에 기록하는 작업을 수행하는데, 이때 디스크 I/O 요청을 실행한 후 해당 작업이 완료될 때까지 기다리는 동안 log file parallel write 대기를 하게 됩니다.
즉, LGWR 내부에서 발생하는 대기 이벤트입니다.
비동기 I/O 환경에서는 멀티 로그 멤버를 병렬로, 동기식 I/O 환경에서는 순차적으로 기록합니다.
대기 이벤트
[사용자가 COMMIT 명령 실행]
↓
[Server Process가 LGWR에게 Redo 로그 기록 요청]
↓
[LGWR는 Redo Buffer → Redo Log File로 기록 시도 (I/O 작업 수행)]
↓
[기록이 완료될 때까지 LGWR는 log file parallel write 이벤트 상태에서 대기]
↓
[기록 완료 후 Server Process에 응답 → COMMIT 처리 완료]
↓
[Server Process는 log file sync 대기 상태에서 해제됨]
log file sync는 Server Process의 대기,
log file parallel write는 LGWR의 대기입니다.
서버 프로세스가 커밋할 때 LGWR의 작업이 지연되면 → 결국 전체 시스템의 응답 속도가 저하됩니다.