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は公開されません

※ コメントは承認されると下記に表示されます

コメント一覧

最近の投稿

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でどういうコンポーネント設計にするかについてまとめます

Netlify Formsを使ってブログサイトにコメント機能を追加する方法を調べたので紹介 Netlify FormsはNetlifyに標準機能として用意されているフォーム機能 サーバレスなので別途コメント用にサーバを用意する必要がなくHTMLを埋め込むだけで準備できる

TypeScriptの入門の入門チートシート 型の種類や使い方についてまとめていくだけでなく、 TypeScriptについてや必要性などについてもまとめることでこのページでTypeScriptをざっくり理解できる程度の内容を目指す

カテゴリ一覧

タグ一覧