[Oracle Forum] Redo Buffer 크기의 의미와 오라클 10gR2에서의 Redo Buffer 크기 계산의 변화
오라클 2007.10.25 13:34아래 글은 내가 참여한 Oracle Forum의 Thread 중 하나로 Redo Buffer에서의 경합에 대해서 다루고 있다. 영어로 외국인들과 이런 문제를 논의한다는게 쉽지 않지만, 일부러 시간을 내서 참여하곤 한다. 한국의 위상(?)을 알리고자 하는 것도 있고, Oracle의 본토인 미국에서는 주로 어떤 문제를 가지고 싸움들을 하는지 알고 싶은 마음도 있다.
최초의 질문은 "ADDM 리포트에 보니까 Redo Buffer 크기를 32M로 늘리라고 되어 있는데, 이게 맞는 말인가?"에서 시작한다. 그 후 log file sync, log file switch completion, log buffer space와 같은 대기 현상에 대해서 각자의 생각을 이야기하고, 그 와중에서 약간의 싸움도 있다.
이런 싸움이 생기는 결정적인 이유는 Redo Buffer 크기가 어느 정도가 적합한가에 대해 통일된 가이드가 없기 때문이다. Redo Buffer의 Redo Record는 1M 이상 할당되면 LGWR에 의해 자동 Write가 된다. 따라서 1M를 넘는 Redo Buffer 크기는 무의미하다는 의견이 있고, 많은 문서에서 이런 사실을 밝히고 있다.
하지만, 동시에 많은 프로세스가 Redo Buffer를 사용하게 되면 Buffer 공간이 모자란 현상이 생길 수 있다. 이 때는 log buffer space 이벤트가 발생한다. 이런 경우에는 Redo Buffer를 늘려주어야 한다. 아마 ADDM이 Redo Buffer 크기를 키우라는 가이드를 했을 때는 이런 사실에 근거를 두었을 것이다.
또 한가지 재미있는 사실은 10gR2부터는 log_buffer 파라미터로 지정한 것보다 실제 Redo Buffer의 크기가 크게 할당된다는 것이다. 10gR2부터는 fixed SGA area와 Redo Buffer가 통합되었고, 이로 인해 fixed SGA 영역에서 쓰고 남는 프리 영역이 Redo Buffer로 할당되기 때문이다. SGA의 메모리 단위는 Granule인데(4~ 16M 사이), 만일 16M 크기의 Granule에서 2M를 쓰고 14M가 남았다면 이 공간을 Redo Buffer가 쓰게 된다.
아래에 실 시스템에서의 예가 있다.
log_buffer=50M
Total System Global Area 734003200 bytes
Fixed Size 2075656 bytes
Variable Size 184550392 bytes
Database Buffers 490733568 bytes
Redo Buffers 56643584 bytes
log_buffer를 50M로 지정했지만, 실제 Redo Buffer 크기는 54M인것을 확인할 수 있다.
최초의 질문은 "ADDM 리포트에 보니까 Redo Buffer 크기를 32M로 늘리라고 되어 있는데, 이게 맞는 말인가?"에서 시작한다. 그 후 log file sync, log file switch completion, log buffer space와 같은 대기 현상에 대해서 각자의 생각을 이야기하고, 그 와중에서 약간의 싸움도 있다.
이런 싸움이 생기는 결정적인 이유는 Redo Buffer 크기가 어느 정도가 적합한가에 대해 통일된 가이드가 없기 때문이다. Redo Buffer의 Redo Record는 1M 이상 할당되면 LGWR에 의해 자동 Write가 된다. 따라서 1M를 넘는 Redo Buffer 크기는 무의미하다는 의견이 있고, 많은 문서에서 이런 사실을 밝히고 있다.
하지만, 동시에 많은 프로세스가 Redo Buffer를 사용하게 되면 Buffer 공간이 모자란 현상이 생길 수 있다. 이 때는 log buffer space 이벤트가 발생한다. 이런 경우에는 Redo Buffer를 늘려주어야 한다. 아마 ADDM이 Redo Buffer 크기를 키우라는 가이드를 했을 때는 이런 사실에 근거를 두었을 것이다.
또 한가지 재미있는 사실은 10gR2부터는 log_buffer 파라미터로 지정한 것보다 실제 Redo Buffer의 크기가 크게 할당된다는 것이다. 10gR2부터는 fixed SGA area와 Redo Buffer가 통합되었고, 이로 인해 fixed SGA 영역에서 쓰고 남는 프리 영역이 Redo Buffer로 할당되기 때문이다. SGA의 메모리 단위는 Granule인데(4~ 16M 사이), 만일 16M 크기의 Granule에서 2M를 쓰고 14M가 남았다면 이 공간을 Redo Buffer가 쓰게 된다.
아래에 실 시스템에서의 예가 있다.
log_buffer=50M
Total System Global Area 734003200 bytes
Fixed Size 2075656 bytes
Variable Size 184550392 bytes
Database Buffers 490733568 bytes
Redo Buffers 56643584 bytes
log_buffer를 50M로 지정했지만, 실제 Redo Buffer 크기는 54M인것을 확인할 수 있다.
| ||||
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
'오라클' 카테고리의 다른 글
PreparedStatement와 Oracle Bind Mismatch의 저주 (2) | 2007.10.31 |
---|---|
[Oracle Forum] db file sequential read 대기와 Oracle I/O 성능에 대한 통찰... (8) | 2007.10.29 |
[Oracle Forum] Redo Buffer 크기의 의미와 오라클 10gR2에서의 Redo Buffer 크기 계산의 변화 (0) | 2007.10.25 |
Oracle Redo Log 기록을 제어하는 세가지 파라미터 (1) | 2007.10.11 |
AWR 써야 하나 말아야 하나... (0) | 2007.08.29 |