서버 프로세스가 리두 버퍼에 리두 레코드를 기록하려는 시점에 리두 로그 파일이 꽉차서 더 이상 쓰기를 할 수 없으면 프로세스는 LGWR에게 로그 파일 스위치를 수행할 것을 요청한다. 서버 프로세스는 LGWR에 의해 로그 파일 스위치가 끝날 때까지 log file switch completion 이벤트를 대기하게 된다. 하지만 로그 파일 스위치가 끝나는 시점에, 새로 사용할 리두 로그 파일에 대해 아직 종료되지 않은 작업이 있다면, 아래와 같이 추가적으로 이벤트를 대기해야 한다.
- 새로 사용할 리두 로그 파일에 대한 체크포인트 작업이 아직 끝나지 않았다면 프로세스는 DBWR에 의해 체크포인트가 끝나기를 기다려야 한다. 이 경우 프로세스는 log file switch (checkpoint incomplete) 이벤트를 대기하게 된다.
- 새로 사용할 리두 로그 파일에 대해 아카이브(Archive) 작업이 아직 끝나지 않았다면 프로세스는 ARCH 프로세스에 의해 아카이브 작업이 끝나기를 기다려야 한다. 이 경우 프로세스는 log file switch (archiving needed) 이벤트를 대기하게 된다. 이 이벤트는 아카이브 모드의 데이터베이스에서만 발생한다.
- 새로 사용할 리두 로그 파일에 대해 Private strands에 대한 플러시(flush) 작업이 아직 끝나지 않았다면 이 작업이 끝나기를 기다려야 한다. 이 경우 프로세스는 log file switch (private strand flush incomplete) 이벤트를 대기하게 된다. 이 이벤트는 오라클 10g R2에서 추가된 것이며, 앞에서 언급한 Private redo strands 기능을 사용할 경우에만 발생한다.
위의 세가지 대기현상은 리두 로그 파일이 순환적으로(Circular) 사용되는 상황에서, 아주 많은 리두 데이터가 생성되기 때문에 미처 이전 작업을 다 끝내기도 전에 다시 재사용할 경우에 발생하게 된다. 따라서 이들은 log file switch completion 대기현상과 항상 같이 나타난다. 정확하게 말하면, 서버 프로세스는 먼저 log file switch completion 이벤트를 대기하고 특수한 경우에 다시 log file switch (checkpoint incomplete)나 log file switch (archving needed), log file switch (private strand flush incomplete) 이벤트를 대기하게 된다.
이름이 비슷해서 관리자들에게 상당한 혼란을 주는 이 네 개의 대기현상의 발생 원인과 해결책은 모두 동일하다. 발생 원인은 트랜잭션이 생성하는 리두 데이터의 양에 비해 리두 로그 파일의 크기가 지나치게 작다는 것이다. 따라서 해결책은 리두 로그 파일의 크기를 충분히 키워주는 것이다. 더불어 Direct load operation이나 Nologging 옵션을 사용하여 리두 데이터의 양을 줄이는 것도 도움이 된다.
'Oracle > Study' 카테고리의 다른 글
direct load 실습 (0) | 2011.03.28 |
---|---|
1z0-043 덤프 공부하면서.. (0) | 2011.03.14 |
SQL 간단한 TEST (0) | 2011.02.25 |
Dataguard 이론 (0) | 2011.01.25 |
오라클에서의 LRU (0) | 2011.01.18 |