2012-03-16 14 views
0

私はたくさんのソリューションを試しましたが、私はまだ何かを理解していません。私は単純な挿入を持っています(別の種類の40列のものがあります)各パラメータの値の配列)は、C#1からODACを使用する。Oracleのバルク挿入パフォーマンス

結果が問題ない要素のあまり最後の3時間で、このインサートということである、多かれ少なかれ4000rowsためのExecuteNonQueryの単一の呼び出しである。

どれでも提案?データソースはソフトウェアからのものであり、db、そのメモリデータにリンクすることはできません。それらを配列に入れて、oracleコマンドの入力パラメータとして渡して実行します。

この場合、ストアドプロシージャを使用して差をつけますか?どうして?

実際に挿入されたインサートは、テーブルには全くインデックスがありません。挿入しようとすると、100個のテーブルを持つOracle XEの通常のインストールにトランザクションが挿入されます。大きい。トランザクションはすなわち1000elements、パフォーマンスとスピードイマイチ直線的に影響を与えないようだ= 10分、4000element = 3時間:私は挿入しようとする 合計データは、100 Mbの最大...私は再びチェックすべきか知っている:(

再びいけないです..CPU 100%とメモリの大量使用で全部

+0

私たちは解決策と理由を排除/調査することができるように気をつけてください。 – Ollie

+0

いくつかの可能性があります:1.複雑な/多数の(データベース管理者に)各挿入後に更新する必要があるインデックス(後で挿入+再作成中に無効にすることを検討してください)2.挿入された各行の後にトリガーされるオン・インサート・トリガー –

+0

はトランザクション中にコミットしていますか?例=> OracleTransaction trans ... cmd.ExecuteNonQuery(); trans.Commit(); trans.Dispose();プロシージャはコミットしていますか? – tbone

答えて

1

4,000行を挿入するのに3時間かかりますか?問題はありますか?各行の長さが数GBでない限り、そのようなパフォーマンスについての真の言い訳はありません。

+0

彼は巨大なことができますブロブを持っています。転送に時間がかかることがあります。 –

+0

ありがとうございますが、実際にDBは通常のOracle XE(バージョン10)を使用しても問題ありません。 –

関連する問題