log file sync: 대기: 커밋 시 LGWR이 redo를 디스크에 플러시하기를 세션이 기다림
Oracle의미
세션이 COMMIT하면 LGWR이 redo 레코드를 redo log 파일에 기록(flush)하기를 기다린다. 이 대기가 높으면 커밋 지연이 있다는 뜻이다.
원인
느린 redo log 디스크(높은 I/O 지연), 너무 자주 커밋하는 애플리케이션(row-by-row commit), LGWR 프로세스의 CPU 압박, 또는 매우 많은 redo 양.
해결 방법
AWR/Statspack으로 평균 대기 시간을 측정한다. redo log 파일을 빠르고 지연이 낮은 디스크(SSD)로 옮긴다. 애플리케이션의 불필요한 커밋 빈도를 줄이고 배치 작업을 묶는다. 필요하면 업무 요구 사항에 비추어 COMMIT_LOGGING/COMMIT_WAIT(commit_write) 옵션을 검토한다. 경고: NOWAIT/BATCH는 내구성을 낮추며, 커밋된 것으로 보이는 트랜잭션이 크래시 시 유실될 수 있다. 유실을 감수할 수 있는 작업에 한해 세션 또는 문장 수준에서만 사용하고, 시스템 전체에 적용하지 않는다. LGWR과 스토리지 지연을 함께 분석한다.
같은 데이터베이스의 다른 항목
- ORA-01722Invalid number
- ORA-02049Timeout: distributed transaction waiting for lock
- enq: TX - row lock contention대기: 다른 트랜잭션이 보유한 행 수준 락에 세션이 블로킹됨
- db file sequential read대기: 단일 블록 물리 읽기, 보통 인덱스 또는 테이블 조회
- db file scattered read대기: 다중 블록 물리 읽기, 보통 full table scan 또는 index fast full scan
- buffer busy waits대기: 다른 세션이 이미 읽거나 수정 중인 버퍼에 대한 경합
- gc buffer busy대기(RAC): 인스턴스 간 전송 중인 cache fusion 블록에 대한 경합