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の方が早い

◼︎ 参考

Share

最近の投稿

NetlifyのSplit TestingとFunctionsについて使い方をまとめる Split TestingはGitHubのブランチをベースにしたA/Bテストを行うための機能のことで、FunctionsはNetlifyでAWS Lambdaを使うことができる

NetlifyとはHTMLなどの静的コンテンツのみで構成されたWebサイトを閲覧できる形で配信するWebサービス GitHubやBitbucket、GitLabなどと連携して使うことができて、リポジトリにプッシュすることで自動でCI/CDを行うことができる、無料枠が豊富で独自ドメインを設定可能

WordPressからJekyll(GitHub Pages)に移行した手順をまとめる。 お金的な事情や使いやすさなどの理由で無料のJekyll+GitHub Pagesに移行した。JekyllとはMarkdown等から静的ページを生成する静的サイトジェネレータ

Scala開発のためにScalaらしさをまとめる 言語設計者の設計思想を元にScalaらしさについてまとめる オブジェクト指向と関数型の融合について

StorybookとはUI開発環境を提供するツール React、React Native、Angular、Vueなどをサポートしている ユーザーは独立した開発環境でコンポーネントを個別に作成して挙動の確認をテストできたり、コンポーネントを一覧にしてカタログ化できるので他の人に紹介する時に使えたりする

カテゴリ一覧

タグ一覧