DISABLE LOGGING

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] 기본 정보

[편집] Parameter 정보


Syntax _DISABLE_LOGGING
Default FALSE
설정방법
  • Parameter File
  • ALTER SYSTEM SET "_DISABLE_LOGGING" = FALSE
지원 대부분의 버전


[편집] 설명

Redo Buffer의 내용을 Redo Log에 기록할 지의 여부를 지정한다. 만일 FALSE로 값을 지정하면 기록이 이루어지지 않는다. Import 작업이 Direct Load 작업의 성능을 높이기 위해 사용되는 경우가 있다. 하지만 데이터 정합성과 복구(Recovery)에 영향을 줄 수 있기 때문에 권장되지 않는다.

[편집] 참고 사항

[편집] 파라미터의 한계

_DISABLE_LOGGING 파라미터는 Redo Log에 기록되는 작업만을 제어한다. 값을 FALSE로 지정하더라도 다음과 같은 작업들은 여전히 이루어진다.

즉, Redo Log에 기록하는 실제 I/O 작업만이 이루어지지 않을 뿐 그 외의 Redo와 관련된 모든 작업은 다 이루어진다. 따라서 Redo Buffer의 크기가 큰 경우에 특히 유리하다. Redo Buffer의 크기가 크면 그 만큼 Log Switch가 덜 발생하고 Checkpoint 또한 이루어지지 않기 때문이다.

[편집] Import/Direct Load와의 관계

대량의 데이터를 로딩하는 경우 _DISABLE_LOGGING 파라미터를 사용하는 것보다는 Direct Load를 사용하는 것이 바람직하다. Direct Load를 사용하는 경우 Redo 데이터 기록을 하지 않기 때문에 성능을 극적으로 개선시킬 수 있다.

Direct Load를 사용할 수 없는 일반 Import의 경우에는 _DISABLE_LOGGING 파라미터가 도움이 될 수 있다. 그러나 이 경우에도 최후의 방법으로 남겨두는 것이 좋다. 사용 가능한 방법들은 다음과 같다.

  • Commit 빈도를 줄인다. 즉 가능한 여러 단위를 묶어서 Commit을 수행한다.
  • Index를 삭제한 상태에서 Loading한다. Loading이 종료되면 인덱스를 Nologging 모드로 재생성한다.
  • COMMIT_WRITE 파라미터를 사용한다.

[편집] _DISABLE_LOGGING 테스트

-- @redo.sql
SELECT name, value FROM v$sysstat 
     WHERE name in ('redo size', 'redo writes', 'redo blocks written');
-- @generate_redo.sql
BEGIN
    FOR idx IN 1 .. 1000 LOOP
       INSERT INTO redo_test VALUES(idx);
       COMMIT;
    END LOOP;
END;
/
-- Case1: _DISABLE_LOGGING = FALSE
SQL> @redo
NAME                                                                  VALUE
---------------------------------------------------------- ----------
redo size                                                             132694312
redo writes                                                          42438
redo blocks written                                               299858

SQL> @generate_redo

NAME                                                                  VALUE
---------------------------------------------------------- ----------
redo size                                                             135248264
redo writes                                                          47353
redo blocks written                                               311326

-- 생성된 Redo 데이터는 다음과 같다.
redo size = 135248264 - 132694312 = 2553952
redo bytes = 47353 - 42438 = 4915
redo blocks written = 311326 - 299858 = 11468

-- Case2: _DISABLE_LOGGING = TRUE
SQL> @redo
NAME                                                                  VALUE
---------------------------------------------------------- ----------
redo size                                                             135248264
redo writes                                                          47353
redo blocks written                                               311326

SQL> @generate_redo
  
NAME                                                                  VALUE
---------------------------------------------------------- ----------
redo size                                                             137732296
redo writes                                                          50760
redo blocks written                                               317759

-- 생성된 Redo 데이터는 다음과 같다.
redo size = 137732296-135248264 = 2484032
redo writes = 50760 - 47353 = 3407
redo blocks written = 317759 - 311326 = 6433

위의 두 결과를 비교해보면 _DISABLE_LOGGING이 TRUE인 경우, redo sizeredo writes는 거의 비슷하지만, redo blocks written 값이 현저하게 작은 것을 확인할 수 있다. 이 테스트 결과는 Redo 데이터를 생성하고 기록하는 작업 자체는 동일하지만, "실제로 디스크에 기록"하는 작업에서만 차이가 있다는 것을 보여준다.

[편집] 관련된 정보들

  1. COMMIT_WRITE 파라미터
  2. _WAIT_FOR_SYNC 파라미터


[편집] 외부 참조