catch-img

DISABLE LOGGING - 日本エクセム株式会社 Oracleパラメータ


目次[非表示]

  1. 1.基本情報
    1. 1.1.Parameter情報
    2. 1.2.説明
  2. 2.注意
    1. 2.1.パラメータの限界
    2. 2.2.Import/ Direct Loadとの関係
    3. 2.3._DISABLE_LOGGINGテスト
  3. 3.関連情報

基本情報

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 Recordの作成

・Redo Bufferの記録

・Log SwitchによるCheckpoint作業

 つまり、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 sizeとredo writesはほとんど似ていますが、redo blocks written値が著しく小さいことが確認できます。このテストの結果は、Redoデータを生成して記録する作業自体は同じですが、「実際にディスクに記録」する作業だけで違いがあることを示しています。


関連情報

1. COMMIT_WRITEパラメータ
2. _WAIT_FOR_SYNCパラメータ


CONTACT

他社に頼らず自社でデータベースを監視・運用をしませんか?
MaxGaugeがサポートします

お役立ち資料は
こちらから

不明点がある方は、
こちらからお問い合わせください

お電話でのお問い合わせはこちら

平日 10時~18時

人気記事ランキング

タグ一覧