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

Published: 2016年2月16日 by tomsato

◼︎ 概要

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

Oracle勉強シリーズ

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

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

このダイレクトロードインサート処理では、バッファ・キャッシュを経由せずにデータを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の方が早い

◼︎ 参考

コメントを書く

※ 個別に返信が必要な時のみご記入ください

※ Emailは公開されません

※ 承認されると名前・コメントが下記に表示されます

コメント一覧

最近の投稿

ビジュアルリグレッションテストについてまとめ、ネットで調べると数多くのライブラリがありどれがどんな立ち位置なのか全体像がわかりずらかったのでどんな種類があるのか入門の入門としてまとめます、またPlaywrightを使って実際に触ってみました

社内ツールなどの超小規模なAPIをGolangで実装する際にフレームワークを使うべきかを、実際にnet/httpを使った実装とフレームワークを使った実装を比較することでどれだけ優位性があるかを見ていきたいと思います。今回はフレームワークにはシンプルで使いやすそうなEchoを使うことにします。

vue-pdfを使ってNuxt.jsで作成しているアプリケーションに pdfスライドを表示させるサンプルを作成しました README.md通りに実装してもうまくいかないところがあったのでそのあたり含めてまとめます

Vue.js / Nuxt.jsにおけるログインの実装方法をまとめる Auth0やNuxt.jsのAuth Moduleとmiddlewareについて調べつつサンプルを作成することで理解を深める

コンポーネント設計について考える Atomic DesignやPresentational Component, Container Componentについてまとめつつ 自分だったらVue.js / Nuxt.jsでどういうコンポーネント設計にするかについてまとめます

カテゴリ一覧

タグ一覧