Redo Log Buffer의 튜닝

 

지난 Buffer Cache에 대한 내용(Oracle Buffer Cache 튜닝과 Multiple Buffer Pool의 사용)에 이어서 Redo Log Buffer에 대해 이야기 해보겠습니다.

 

Redo Log Buffer Overview

버퍼 캐시에서 데이터 블록을 변경하는 서버 프로세스는 Log Buffer에 Redo 데이터를 생성합니다. 다음 조건 중 하나에 해당하면 log writer process (LGWR)는 Redo Log Buffer에서 Online Redo Log로 항목을 복사하기 위해 쓰기를 시작합니다.

  • Redo Log Buffer가 3분의 1 이상 가득 찼을때
  • LGWR이 COMMIT 또는 ROLLBACK을 수행하는 서버 프로세스에 의해 게시
  • DBWR (database writer process)에서 LGWR에 게시

LGWR이 Redo Log Buffer에서 Redo Log File 또는 Disk에 Redo 항목을 쓰면, 사용자 프로세스는 다음 그림과 같이 디스크에 쓰여진 메모리의 항목을 통해 새 항목을 복사할 수 있습니다.

Description of Figure 13-2 follows
LGWR은 액세스가 자주 발생하더라도 새로운 항목을 쓰기 위해 Redo Log Buffer에 지속적으로 공간을 확보 할 수있을 정도로 빠르게 쓰기를 시도합니다. Redo Log Buffer가 크면 새로운 엔트리를 위한 공간이 생길 가능성이 높아지고 LGWR은 리두 레코드를 효율적으로 처리 할 수 ​​있습니다. 업데이트가 많은 시스템에서 Redo Log Buffer가 너무 작은 경우 LGWR은 디스크에 3분의 2를 비우기 위해 계속 Redo를 디스크로 플러시합니다.

고속 프로세서와 상대적으로 느린 디스크가 있는 시스템에서, 프로세서가 Redo Log WriterRedo Log Buffer의 일부를 디스크로 이동하는데 걸리는 시간동안 나머지 Redo Log Buffer를 채울 수 있습니다. 이 경우 Redo Log Buffer가 크면 디스크 속도가 느려짐으로 인한 영향을 일시적으로 차단할 수 있습니다. 아니면 다음중 하나를 개선사항으로 고려해야 합니다.

  • The Checkpointing 또는 Archiving 프로세스
  • 모든 Online Log를 빠른 Read/Write 성능을 가진 저장 장치로 이동함으로써 LGWR의 성능을 향상

Redo Log Buffer의 성능을 향상 시키려면 다음과 같은 사항을 확인해야 합니다.

  • LGWR이 Redo Log 항목을 효율적으로 쓸 수 있도록 배치 작업에 대한 배치 커밋 작업
  • 대량의 데이터를 Load 할 때 NOLOGGING 옵션 사용

 

Redo Log Buffer를 구성하는 방법

Redo Log Buffer의 기본 크기는 다음과 같이 계산됩니다.

MAX(0.5M, (128K * number of cpus))

대량의 데이터를 Insert, Modify 또는 Delete하는 어플리케이션이 있는 경우 Redo Log Buffer의 기본 크기를 변경해야 할 필요가 있습니다. Oracle은 Redo Log Buffer의 크기를 최소 8MB로 설정할 것을 권장하고 있습니다. Flashback 기능을 사용하고 4GB 이상의 SGA를 사용하는 데이터베이스의 경우 최소 64MB로 설정해야 합니다. 비동기 Redo 전송(Asynchronous redo transport)과 Redo의 갱신 속도가 빠른 환경에서 Oracle Data Guard를 사용하는 경우에는 최소 256MB로 설정해야 합니다.

Redo Log Buffer 크기가 너무 작은지 확인하려면 Redo Log Buffer 통계를 모니터링해야 합니다. 또한 log buffer space wait event가 데이터베이스 인스턴스의 대기 시간에 중요한 요소임을 확인 할 수 있습니다. 확인이 되지 않는다면 현재 사용중인 Log Buffer 크기가 이미 적절한 크기를 가진것 입니다.

 

Redo Log Buffer 통계의 사용법

REDO BUFFER Assocation RETRIES 통계는 사용자 프로세스가 Redo Log Buffer에서 새로운 항목을 기록하기 위한 공간을 대기하는 횟수를 반영합니다. 이 통계는 V$SYSSTAT View를 사용하여 조회 할 수 있습니다.

애플리케이션이 실행되는 동안 일정 기간 동안 Redo Log Buffer 할당 재시도 통계를 모니터해야합니다. 이 통계량의 값은 구간에서 거의 0에 가까워 야합니다. 이 값이 지속적으로 증가하면 사용자 프로세스가 Redo Log Buffer의 공간을 사용할 수있을 때까지 기다려야한다는 의미입니다. Redo Log Buffer가 너무 작거나 잦은 Checkpoint로 인해 대기가 발생할 수 있습니다. 이런 경우에는 Redo Log Buffer의 사이즈를 늘리거나 checkpoint와 archiving process를 확인해 봐야 합니다.

아래는 Redo Log Buffer 통계를 조회하는 쿼리입니다.

SELECT name, value
  FROM V$SYSSTAT
  WHERE name = 'redo buffer allocation retries';

 

You may also like...

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다