2018.10.24
DISABLE LOGGING
目次
基本情報
パラメータ
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パラメータ