タイトル
TOPOracle → This Page

IMPORTとSQL*Loaderの実行比較例

概要

ここではIMPORTとSQL*Loaderの実行結果を紹介します。
環境によって結果は色々と変わると思いますが、あくまでも参考程度で。
業務で依頼があって検証しただけであり、使ったデータベースの設計にも関わってませんので
「なんでそんな環境や構造なの?」と言われてもお答えできません(^^;;

環境

OSAIX 5.2
DBOracle Database 10g Enterprise Edition 10.1.0.4.0(64bit)

対象

対象スキーマ数4ユーザ
対象テーブル数約400テーブル
対象レコード数約1.4億レコード
総カラム数約8050カラム

カラムのデータ型内訳
CHAR型約5800カラム
VARCHAR2型約1500カラム
NUMBER型約250カラム
DATE型約250カラム
それ以外約250カラム

実行結果:EXPORT→IMPORT

EXPORTダンプファイルサイズ34.2GB
EXP コマンドによるエクスポート時間2.3時間
IMP コマンドによるインポート時間16.5時間
※1 exp、impコマンドはそれぞれ必要最低限のパラメータ以外デフォルト値のまま実施
※2 「索引削除→インポート→索引再作成」の手順で実施(索引削除と索引再作成の時間はインポート時間には含めていない)

実行結果:固定長出力→SQL*Loader

固定長ファイルサイズ57.7GB
固定長ファイル出力時間9.2時間
SQL*Loader(従来型パス)インポート時間36.5時間
SQL*Loader(ダイレクトパス)インポート時間4.0時間
※1 sqlldrコマンドは必要最低限のパラメータ以外デフォルト値のまま実施
※2 固定長ファイルの出力は SQL*Plus の Spool を使った
※3 「索引削除→インポート→索引再作成」の手順で実施(索引削除と索引再作成の時間はインポート時間には含めていない)
※4 SQL*Loaderは制御ファイルにSQL関数を多用しているため時間が余計にかかっている可能性がある
  (全てのNUMBER型、NOT NULL 制約付の全てのCHAR型、VARCHAR2型にSQL関数を使用)
※5 SQL*Loaderはカラム値内改行があると非常に対応が厳しいので固定長ファイル出力時に全てのCHAR型、VARCHAR2型のカラムで
  REPLACE関数を使って半角スペースに置き換えている
  そのため出力時間が余計にかかっている

考察等

  • SQL*Loader ダイレクトパスはやはり高速だった
  • SQL*Loader 従来型は以外にも imp コマンドより遅かったが固定長ファイルなのでファイルIOがきつかったのと、パラメータがデフォルトなのが影響大だったかもしれない
  • SQL*Loader は制御ファイルに SQL 関数を多用した(そうしないと取り込めないテーブルがあったため)が、それがなければ多少は早くなったかもしれない
  • 後に一部の大きいテーブルで試したが、exp コマンドは direct=y をつけるとそこそこ早くなった
  • 後に一部の大きいテーブルで試したが、sqlldr コマンド(従来型)は rows=1000 をつけるとそこそこ早くなった

更新履歴

2012/02/22 新規作成


TOPOracle → This Page