Log buffer space

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] Basic Info

리두 버퍼에 리두 레코드를 기록하려는 프로세스는 리두 버퍼 내에 필요한 공간을 확보하기 위해 redo allocation 래치를 획득해야 한다. redo allocation 래치를 획득한 상태에서 리두 버퍼에 공간을 확보하려는 순간에 적절한 여유공간이 없는 경우, 공간이 확보되기를 기다려야 한다. 이 때, 경우에 따라 두 가지 종류의 이벤트를 대기하게 된다. 만일 현재 사용중인 리두 로그 파일이 꽉 차서 더 이상 여유공간을 확보할 수 없다면, LGWR은 로그 파일 스위치(log file switch)를 수행하고, 서버 프로세스는 log file switch completion 이벤트를 대기한다. 그 외의 경우에는 log buffer space 이벤트를 대기하게 된다. 전자의 경우, 로그 파일 스위치가 끝난 직후 log buffer space 대기가 한꺼번에 증가하는 현상이 생길 수 있다. 이는 리두 버퍼에 기록을 하려는 다수의 세션들이 로그 파일 스위치가 끝나기를 기다렸다가 한꺼번에 리두 버퍼에 기록을 하기 위해 경쟁하기 때문이다.

[편집] Parameter & Wait Time

[편집] Wait Parameters

log buffer space 대기이벤트는 대기 파라미터를 사용하지 않는다.

[편집] Wait Time

일반적으로는 1초이나 log file switch가 발생할 경우는 5초를 대기한다.

[편집] Check Point & Solution

[편집] 로그 버퍼 크기를 충분히 크게 한다.

log buffer space 대기는 트랜잭션에 의해 생성되는 리두의 양에 비해 리두 버퍼의 크기가 작을 때 발생한다. 따라서 log buffer space 대기가 광범위하게 나타날 때는 리두 버퍼의 크기가 너무 작지 않은지 조사해보아야 하며 필요하면 리두 버퍼의 크기를 충분히 늘려줘야 한다. 만일 log buffer space 대기와 log file switch completion 대기가 같이 나타난다면 리두 버퍼의 크기와 함께 리두 로그 파일의 크기의 적합성을 의심해볼 필요가 있다. 많은 경우 이 두개의 대기는 함께 나타난다. 만일 리두 로그 파일의 크기가 지나치게 작다면 log file switch completion 대기가 증가하게 되고, 로그 파일 스위치가 끝난 직후 다시 log buffer space 대기가 나타나는 현상이 생기게 된다. log buffer space 대기를 줄이기 위해 리두 버퍼 크기를 늘리는 경우 log file sync 대기가 증가할 수 있는데, 이에 대한 해결책은 Redo Buffer의 크기와 log file sync 이벤트를 참고하기 바란다.


리두 버퍼의 크기에 따라 log buffer space 대기가 어떻게 나타나는지 직접 테스트해보자. 테스트 시나리오는 다음과 같다.

  • 13만건 정도의 로우를 지닌 TEST 테이블에 대해 Update를 수행한다.
  • Case1에서는 리두 버퍼의 크기를 256 K로 지정한다.
  • Case2에서는 리두 버퍼의 크기를 5 M로 지정한다.
  • 두 Case에서 log buffer space 대기가 어떻게 발생하는지 확인한다.


Case 1 : 리두 버퍼의 크기가 256 K로 매우 작게 설정된 경우

SQL> show sga
Total System Global Area  314572800 bytes
Fixed Size                             788692 bytes
Variable Size                    263190316 bytes
Database Buffers                50331648 bytes
Redo Buffers                         262144 bytes
SQL> update test set id = id, name = name; 131079 rows updated.
SQL> select event, total_waits, time_waited from v$session_event where sid = (select sid from v$mystat where rownum = 1) order by 3 desc;
EVENT TOTAL_WAITS TIME_WAITED ------------------------------------ ----------------- ---------------- SQL*Net message from client 19 24819 log buffer space 1582 6234 db file scattered read 616 4297 log file switch completion 89 1210 db file sequential read 1073 1202 log file switch (checkpoint in 4 137 complete)
-- log buffer space 대기에 많은 시간을 소요했음을 알 수 있다.
-- 더불어, log file switch completion 대기도 많은 비중을 차지한다. 이는 리두 로그 파일의 크기가 적절치 못함을 암시한다.


Case 2 : 리두 버퍼의 크기를 5 M로 크게 설정한 경우

SQL> alter system set log_buffer=5242880 scope=spfile;
SQL> -- 재기동
SQL> show sga
Total System Global Area  314572800 bytes
Fixed Size                             788692 bytes
Variable Size                    258209580 bytes
Database Buffers                50331648 bytes
Redo Buffers                        5242880 bytes
SQL> update test set id = id, name = name; 131079 rows updated.
SQL> select event, total_waits, time_waited from v$session_event where sid = (select sid from v$mystat where rownum = 1) order by 3 desc;
EVENT TOTAL_WAITS TIME_WAITED ---------------------------------- ----------------- ----------------- db file scattered read 817 4783 SQL*Net message from client 18 3718 log buffer space 66 3455 log file switch completion 115 2651 db file sequential read 1208 2103 free buffer waits 1160 944 log file sync 2 10 latch: cache buffers lru chain 2 1 latch: cache buffers chains 2 1 latch: redo allocation 1 1 latch: shared pool 1 1
-- log buffer space 이벤트의 대기회수, 대기시간 모두 줄어들었음을 알 수 있다.

위의 테스트결과에서 알 수 있듯이 리두 버퍼의 크기가 log buffer space 이벤트 대기에 미치는 영향은 절대적인 것이다.

[편집] 리두 데이터를 적게 생성하라

log buffer space 대기를 줄이는 또 하나의 방법은 리두 데이터를 적게 생성하는 것이다. Direct load 기능을 적절히 사용하고 Nologging 옵션을 부여하는 것 등이 이 방법에 속한다.

자세한 내용은 log file sync#Redo 데이터의 양과 log file sync을 참조한다.

[편집] LGWR의 성능을 개선하라

log buffer space 대기는 free buffer waits 대기와 비슷한 속성을 지닌다. free buffer waits 대기가 DBWR 프로세스가 서버 프로세스들의 프리 버퍼(free buffer) 요구 속도를 못 따라가는 데서 생기듯이, log buffer space 대기는 LGWR 프로세스가 서버 프로세스들의 프리 리두 버퍼(free redo buffer) 영역의 요구 속도를 못 따라가는 데서 생기는 것이다. free buffer waits 대기를 줄이는 한 가지 방법이 DBWR의 성능개선인 것처럼, log buffer space 대기를 줄이는 방법 중 하나도 LGWR의 성능을 개선시키는 것이다. 더 빠르고 효율적인 I/O 시스템을 리두 로그 파일에 사용함으로써 LGWR의 쓰기 성능을 개선시킬 수 있다.

[편집] Event Tip

[편집] Analysis Case