1. log buffer space

1) 이벤트 원인

  • 리두 버퍼에 리두 레코드를 기록하려는 프로세스는 리두 버퍼내에 필요한 공간을 확보하기 위해 'redo allocation' 래치를 획득해야 함.
  • 'redo allocation' 래치 획득 후, 리두 버퍼에 공간을 확보하려고 할 때 여유 공간이 없을 경우, 공간 확보되기를 기다려야 함.
  • 이 때 아래의 내용처럼 2가지 대기이벤트를 대기함.
log file switch completion☞ LGWR은 'log file switch'를 수행하고, 서버 프로세스는 'log file switch completion' 이벤트 대기.
log buffer space☞ 'log file switch completion' 이벤트 이외의 경우 'log buffer space' 이벤트 대기.
☞ 'log file switch'가 끝난 직후, 'log buffer space'가 한꺼번에 증가하는 현상 생길 수 있음.
☞ 이는 리두 버퍼에 기록을 하려는 다수의 세션들이 'log file switch'가 끝나기를 기다렸다가, 한꺼번에 리두 버퍼에 기록을 하기 위해 경쟁하기 때문.

2) 해결방안

① 'log buffer space' 대기 이벤트가 광범위하게 나타날 경우
  • 리두 버퍼의 크기가 너무 작지 않은지 조사해 보아야 하며, 작을 경우 충분히 늘려줘야 함.
② 'log buffer space', 'log file switch completion' 2개의 대기 이벤트가 광범위하게 나타날 경우
  • 리부 버퍼의 크기와 함께 리두 로그 파일 크기의 적합성을 의심해 보아야 함.

2. log file switch etc

1) log file switch completion

  • 서버 프로세스가 리두 버퍼에 리두 레코드를 기록하려는 시점에 리두 로그 파일이 꽉 차서 더 이상 쓰기를 할 수 없을 경우, 프로세스는 LGWR에게 'log file switch'를 수행할 것으로 요청.
  • 서버 프로세스는 LGWR에 의해 로그 파일 스위치가 끝날 때까지 'log file switch completion' 이벤트를 대기함.
  • 만약, 'log file switch'가 끝나는 시점에, 새로 사용할 리두 로그 파일에 대해 아직 종료되지 않은 작업이 있을 경우, 아래의 추가 이벤트 대기함.

2) log file switch(checkpoint incomplete)

  • 새로 사용할 리두 로그 파일에 대한 체크포인트 작업이 아직 끝나지 않았다면 프로세스는 DBWR에 의해 체크포인트가 끝나기를 대기해야 함.
  • 이 때, 'log file switch(checkpoint incomplete)' 이벤트 대기.

3) log file switch(archiving needed)

  • 새로 사용할 리두 로그 파일에 대해 'Archive' 작업이 아직 끝나지 않았다면, 프로세스는 ARCH 프로세스에 의해 'Archive' 작업이 끝나기를 대기해야 함.
  • 이 때 'log file switch(archiving needed)' 이벤트를 대기하며, 이 이벤트는 'Archive' 모드의 DB에서만 발생.

4) log file switch(private strand flush incomplete)

  • 새로 사용할 리두 로그 파일에 대해 'private strand'에 대한 'flush' 작업이 아직 끝나지 않았다면, 이 작업이 끝나기를 대기해야 함.
  • 이 때, 'log file switch(private strand flush incomplete)' 이벤트를 대기하며, 10gR2부터 추가됨.

5) 해결방안

  • 발생 원인은 트랜잭션이 생성하는 리두 데이터의 양에 비해 리두 로그 파일의 크기가 지나치게 작기 때문.
  • 따라서 해결책은 리두 로그 파일의 크기를 충분히 늘려주어야 하며, 추가로 'Direct load operation', 'Nologging' 옵션을 사용하여 리두 데이터의 양을 줄여야 함.

문서에 대하여