TOP →
Oracle → This Page
IMPORTとSQL*Loaderの実行比較例
概要
ここではIMPORTとSQL*Loaderの実行結果を紹介します。
環境によって結果は色々と変わると思いますが、あくまでも参考程度で。
業務で依頼があって検証しただけであり、使ったデータベースの設計にも関わってませんので
「なんでそんな環境や構造なの?」と言われてもお答えできません(^^;;
環境
OS | AIX 5.2 |
DB | Oracle 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 新規作成
TOP →
Oracle → This Page