Oracle ダイレクトロードインサートについて

◼︎ 目次

  1. 概要
  2. ダイレクトロードインサートとは
  3. 使い方
  4. 注意点
  5. 検証
  6. 参考

◼︎ 概要

Oracleのダイレクトロードインサートについて調べます
素早いselect insertができるのでテーブルからテーブルへのコピーする時に使うといいかもしれません

Oracle勉強シリーズ

◼︎ ダイレクトロードインサートとは

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

このダイレクトロードインサート処理では、バッファ・キャッシュを経由せずにデータをINSERTすることができ、また最低限のREDO情報のみが生成されるため、通常のINSERT処理よりも大きくパフォーマンスを改善できる可能性があります。
引用: atmarkIT 更新/挿入/削除のSQLを高速化する3つの技とは? (2/3)

  • 数百万件のデータinsertが数分とかからない
  • 通常のパスのローディングに比べて数分の1程度の時間で投入できる

◼︎ 使い方

APPENDのヒント句を使うことによって利用できる

INSERT /*+ APPEND */ INTO TABLE_NAME_A (SELECT ... FROM TABLE_NAME_B);

※ VALUES句を使用することができず、SELECT文を記載する必要がある

◼︎ 注意点

ハイウォーターマーク(HWM)以降のブロックにINSERTされる 通常のINSERTとは異なりHWM以降のブロックにデータをINSERTされてしまうため通常のINSERTよりも領域の使用効率が悪くなる
表領域のロックがかかる 通常のINSERTではレコード単位のロックだがダイレクトロードインサートでは表単位でロックがかかる
処理後にはトランザクションを完了させる必要がある ダイレクトロードインサート実施後にCOMMITまたはROLLBACKが必要

もし続けて同じ表にSELECTを行うと「ORA-12838:オブジェクトは、パラレルで変更された後は読み込み/変更できません。」というエラーが発生する


ハイウォータマーク(HWM)とは
ハイウォータマークとは、テーブルスペースやセグメントごとに設置される指標で、現在までに最高でどこまでブロックを使用したかを表す
insert文を発行することによって少しずつHWMが上がってくる、このHWMを下げるにはtruncateやdrop/create tableを行う必要があってdeleteでは下がらない
このHWMが高い(insert/deleteを多数行う)ことによってデータ量が低いにも関わらずにレスポンスが悪くなることがある

◼︎ 検証

別の方のサイトになりますが検証されていらっしゃるので気になる方は見てみてください

少ない件数の場合は準備などがあるため通常のinsertの方が早い

◼︎ 参考


Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です