ダイレクト・パス・インサート (ダイレクト・ロード・インサート)

ダイレクト・パス・インサートとは、データベースバッファを経由せずデータファイルへ 直接データを落とし込むという点から、ある特定条件下で非常に優れた処理方法である。 データベースのバッファ処理を経由しないことで高速に処理でき、バッファから他のキャッシュを追い出すことによるキャッシュヒット率の低下を防ぐこともできる。

高速に大量データをインサートさせるための手法

ダイレクト・パス・インサートによる高速のインサート処理にはトレードオフがあるが脅威的な速さを誇る。
数百万件オーダのデータの投入するのに数分とかからない(レコードサイズ、スペックに左右はされる)
通常のパスのローディングに比べて 数分の1 程度の時間で投入できる。
NOLOGGING 状態の場合 REDO ログが出力されない。(高速にはなる一方でフルバックアップするまで間はそのデータをアーカイブログから復旧できない)

ダイレクトパスインサートの実行イメージ)

ダイレクトパスインサートの動作イメージ

多重度が 1 の場合、ハイウォータマーク 直後でデータ生成が行われる。
パーティション表 の場合には、それぞれのパーティションのハイウォータマークの直後の領域を利用することができる。

ダイレクト・パス・インサートの使用上の注意

作業準備が必要なので少量のデータを作成するのには向いていない。
以下の代償のため活用シーンは限られている。

  • テーブル(またはパーティション)が排他ロックされる。
  • HWM(ハイウォータマーク)の後ろの連続領域にデータが入る。
  • インデックスの再構築などにより、多くの一時表領域を消費する。(多重化するとさらに多く必要になる)
  • VALUES句は使用できない。(※1 : Oracle 11g R2より以前 )
    (INSER INTO 〜 SELECT 〜文でのみ使用可能:SQL-Loader ユーティリティでも可能)

(※1) INSERT 〜 VALUES ( 〜 ) の構文に使用される場合には ダイレクトパスインサートは利用できなかったが 「APPEND_VALUES ヒント Oracle 11g Release2」が追加されることで、ダイレクトパスインサートが可能となっている。

単発の利用では意味がなくバルク処理や配列を使った大量のインサートに有用。プログラムを使用したテストデータの一括&大量生成時の時間節約にはなりそうなので、オラクルはその辺のツールを作成する予定でもあるのかもしれない。

(注意) APPEND_VALUES ヒントは INSERT /*+ APPEND_VALUES */ 〜 VALUES ( 〜 ) のような VALUES を使用する構文でのみ有効。
INSERT /*+ APPEND_VALUES */ 〜 SELECT 〜 の構文では従来型のインサートになる。

以下の制限に該当する場合、ダイレクト・パス・インサートを使用できない。(暗黙的に従来型へ変換される)

  • 参照整合性制約、トリガー が定義されている表
  • 索引構成表、クラスタ表
  • オブジェクト型を使用している表
  • レプリケート、分散トランザクション

ハイウォータマーク の管理を誤るとセグメントの領域が肥大化して格納効率が悪化し、検索速度も低下する。 さらに領域不足エラーが発生することになることにもつながる。
パラレルのインサート処理はデータベースバッファを経由しないダイレクト・パス・インサートで行われていることもにも注意。

インポート (IMP) ユーティリティは、ダイレクトパスインサート機能を使用できないため従来通りバッファ経由 = INSERT のバルク・インサート処理になる。

ダイレクト・パス・インサートの主な用途

  • テーブルの初期データエントリ
  • パーティション単位のデータエントリ
  • 領域解放を伴う TRUNCATE TABLE &データローディング(SQL Loader)

ダイレクト・パス・インサート の 使用例

INSERT /*+ APPEND */ INTO dest_table SELECT * FROM source_table ;
 
-- 以下は Oracle 11g R2 から利用可能 (APPEND_VALUES ヒント)
INSERT  /*+ APPEND_VALUES */ INTO dest_table VALUES ('あいう') ;


ライセンス

注意 パラレル(多重化)・ダイレクト・パス・インサートの機能には Enterprise Edition のライセンスが必要。

サイト統合にともない以下のリンクは消滅して代替情報の URL は不明

Oracle9i ではパラレルダイレクトロードは Standard Edition で利用可能。
Oracle10g も同様と思いますが、項目自体が削除されているので サポート、または、オラクルダイレクトに確認してください。

関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー