3

Oracleデータベースに大量(750.000)のレコードを挿入するために使用されるJavaプログラムがあります。OCIクライアントでOJDBC6ライブラリを使用しています。書き込まれるテーブルには330列が含まれ、そのうち8列が1つ以上のインデックスに表示されます。

2つのアプローチを試した後も、パフォーマンスの問題に苦労しています。

  1. プリペアドステートメントを1回作成し、各レコードのパラメーターを入力してからステートメントを実行するには、1時間29分かかります。
  2. プリペアドステートメントを1回作成し、各レコードのパラメーターを入力し、それらをバッチに追加して、500/1000/5000(いくつかのオプションを試しました)の処理済みレコードごとにバッチを実行するには、0時間27分かかります。

ただし、Informatica PowerCenterなどのETLツールを使用して同じデータを同じテーブルにマップすると、数分しかかかりません。このタイミングに到達することは希望的観測かもしれませんが、パフォーマンスが得られないかどうかは疑問です。

このアクションの合理的なタイミングと、それらをどのように達成できるかについて誰かが考えていますか?どんな助けでもありがたいです、事前に感謝します!

(関連する質問:私も多くのレコードを更新する必要があります。最も効率的なアプローチは、変更された列を追跡し、これらの列のみを含むレコード依存のプリペアドステートメントを作成するか、常に更新することです。すべての列、それによって同じ準備されたステートメントを再利用しますか?)

4

2 に答える 2

0

Java http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/ThreadGroup.htmlで ThreadGroup を使用できます。

;)

于 2012-12-11T12:55:59.263 に答える
0

もう 1 つの試みとして、インデックスを削除し、データを挿入してから、インデックスを再ロードします。Java ほど簡単ではありませんが、十分に単純です。

于 2012-11-24T04:17:15.390 に答える