◼︎ 概要
Oracleのダイレクトロードインサートについて調べます
素早いselect insertができるのでテーブルからテーブルへのコピーする時に使うといいかもしれません
Oracle勉強シリーズ
- Oracleの表領域についてまとめてみた
- Oracleのパーティションについてまとめてみた
- Oracle ダイレクトロードインサートについて
- OracleのSEQUENCEについて
- Oracleのパーティションインデックスについて
- Oracleのフェイルオーバーについて
- Oracle11gから12cへの移行の注意点
◼︎ ダイレクトロードインサートとは
ダイレクトロードインサート(ダイレクトパスインサート)とは
このダイレクトロードインサート処理では、バッファ・キャッシュを経由せずにデータをINSERTすることができ、また最低限のREDO情報のみが生成されるため、通常のINSERT処理よりも大きくパフォーマンスを改善できる可能性があります。
引用: atmarkIT 更新/挿入/削除のSQLを高速化する3つの技とは? (2/3)
- 数百万件のデータinsertが数分とかからない
- 通常のパスのローディングに比べて数分の1程度の時間で投入できる
◼︎ 使い方
APPENDのヒント句を使うことによって利用できる
※ 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の方が早い
コメントを書く
コメント一覧