LGWR프로세서가 리두 버퍼의 내용을 리두 로그 파일에 기록하는 방식 분류

기록방식기록시점대기이벤트
background write커밋수행과 관련된 기록 이외에는 모두
sync write커밋수행log file sync

LGWR프로세서가 리두 버퍼의 내용을 리두 로그 파일에 기록하는 경우

  • LGWR 프로세스가 idle 한 경우
  1. LGWR프로세스는 rdbms ipc message 란 idle 대기이벤트를 대기하며, 해당 대기이벤트의 timeout은 3초임
  2. 3초(timeout) 경과한 후에 wake up해도 리두 로그 버퍼에 리두 로그 파일로 기록해야 할 내용이 있으면 "backgroudn write"수행
  • 현재 사용된 로그 버퍼블록 수가 _LOG_IO_SIZE 파라미터에 정의된 블록 수 이상이고, LGWR 프로세스가 idle한 경우
  1. 오라클 프로세스는 로그버퍼의 공간을 할당 받을 때 마다, 현재 사용된 로그 버퍼 블록의 수를 계산함
  2. LGWR프로세스는 "background write"를 수행하도록 포스트 됨
  3. _LOG_IO_SIZE의 기본설정 값은 로그버퍼 볼록의 1/3(단위는 로그 블록 수) 또는 1Mb중 작은 값으로 설정됨
  • 트랜잭션이 커밋될 때
  1. 리두 레코드에는 커밋에 대한 체인지 백터가 생성되며, 해당 로그 레코드를 포함하는 리두 레코드를 디스크로 기록하기 전 까지는 트랜잭션 복구가 불가능함
  2. 커밋을 수행한 프로세스는 LGWR 프로세스를 포스트 한 후에 log file sync 대기 이벤트를 대기하게 됨
  3. 이런 기록 방식을 "sync write"라고함
  4. 커밋을 과다하게 발생시키는 오라클 프로세스는 log file sync 대기이벤트의 대기 시간이 길어짐
  • 오라클 8i부터는 DBWR프로세스가 LGWR프로세스의 on-disk RBA보다 큰 high-RBA를 가진 블록을 기록하려고 할때
  1. 해당 블록을 deferred write queue에 위치시킨 후에 LWGR프로세스를 포스트 하여 sync를 맞추도록하며, DBWR프로세스는 기록 작업을 계속하여 수행
  2. 오라클 8i이전에는 이러한 경우 DBWR프로세스가 log file sync 대기 이벤트를 대기하였음