人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

プログラムの速度改善の相談です。
vb.netでテキストファイルを解析してからOracle(10g)に登録するプログラムを作成しています。
接続にはODP.netでOracleDataAdapterのFillメソッドを使ってます。
動きには問題ないのですが時間がかかります。
大体何十万行数十MBほどのテキストファイルを解析し、数千件ぐらいのデータにしてからそれを10あまりのテーブルに登録してます。
こういう場合、一個一個の処理の速さは早いためチューニングにも限界があるような気がします。
このようにInsertが多数発生する場合に何か速度改善の方法はないでしょうか?
事情によりvb.netでの開発を辞めるとかテキストファイルのフォーマットを変えるなんていうあまりに抜本的な変更は出来ません。


●質問者: matttsu
●カテゴリ:コンピュータ
✍キーワード:.NET 10g MB ODP Oracle
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● lizy
●40ポイント

ちょっと前に同じような質問がありました。

question:1180856737

テキストファイルを解析・変換しておいて、それをOracleの機能を用いてインポートする方法が考えられます(Oracleには詳しくありませんが、おそらくそういう機能が存在すると思います)

あとはindexが多く設定されている場合、insert前に取り除くなりしておいて完了してから再度設定しなおすのも効果があるかもしれません。

そのほかVB.NETのプログラムで、insert1回ごとにcommitするような作りになっていないかを確認してはいかがでしょうか(おそらくすでに確認済みだとは思いますが)


2 ● wm5775
●40ポイント ベストアンサー

こんにちは。

わたしも1番さんと同じで、データベースのもつダイレクトローディングの機能を使用するのが良いと思います。

Oracleはあまり知りませんが、すこし調べたら2通りくらいのダイレクトローディングの機能があるようで、このあたりはおそらくInsert文を使うのではなく、ダイレクトにDBの物理記憶領域に書き込みに行くと思うのでInsert文によるオーバーヘッドは回避できるのではないでしょうか?

ODP.netについても良くわかりませんが、おそらくその手のデータベースラッパーはいちいちInsertやUpdate、Commitを乱発するでしょうし、Wrapperのオーバーヘッドがバカにならないのだと思います。

すでに、


何十万行数十MBほどのテキストファイルを解析し、数千件ぐらいのデータにしてからそれを10あまりのテーブルに登録してます。

とあるので、安物DBならまだしも、数千件程度のInsertで遅いと感じるのがちょっと異常な感じがします。ローディングすべきデータの処理がすでに済んでいるわけですから、わざわざODP.netを介する必要はないんではないでしょうか?(というか、今後もそのODP.netのコードを保守したり、バグに引きずられるコストもばかになりません。)

#SQL*Loaderによるパラレルダイレクトパスであれば、平行してデータのロードができるようですので、10のテーブルについての尾ロードを一気に発行しても処理できるのではないでしょうか?

Oracle Data PumpとOracle SQL*Loader

http://otn.oracle.co.jp/products/database/utilities/index.html

Data Pump ImportはオリジナルImportの15?45倍です。

Oracle SQL*Loader

http://otndnld.oracle.co.jp/products/database/oracle10g/utility/...

ダイレクト・パスによるロード

ダイレクト・パスによるロードは、メモリー内にデータ・ブロックを作成し、現在ロード中の表に割り当てられたエクステントに直接保存します。ダイレクト・パスによるロードは、フィールド仕様を使用して、Oracleデータ・ブロック全体を作成し、Oracleデータ・ファイルに直接書き込みます。この場合、通常のデータ処理は無視されます。 ダイレクト・パスによるロードは、従来型ロードと比較して高速ですが、多少制限があります。

パラレル・ダイレクト・パスによるロードは、複数のパスによるロード・セッションが可能なため、同じデータ・セグメントを同時にロードできます。 パラレル・ダイレクト・パスは、ダイレクト・パスと比較して制限があります。

素人なのにすみません。

#それこそ、抜本的な改革はできないといわれているのに開発環境を根底から覆すような提案になってしまいました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ