0

数百万行のように、非常に大きなテーブルがいくつかあります(とにかく私にとって)。レガシー システムからそれらをロードしていますが、時間がかかりすぎています。ハードウェアが問題ないと仮定すると、それは高速です。どうすればこれをスピードアップできますか? あるシステムから CSV にエクスポートしようとしましたが、Sql ローダーを使用しました - 遅いです。また、あるシステムから別のシステムへの直接リンクを試みたので、中間の csv ファイルはなく、あるロードから別のロードにアンロードするだけです。

ある人は、テーブルの事前ステージングについて何か言いました。それが何であるか、またはそれが役立つかどうかはわかりません。入力希望でした。ありがとうございました。

Oracle 11g が使用されているものです。

更新: 私のデータベースはクラスター化されているため、速度を上げるために何かできるかどうかわかりません。

4

3 に答える 3

2

お手並みをみせてもらおう:

  • すべての制約を無効にし、ロードプロセス後にのみ有効にします
  • CTAS(選択としてテーブルを作成)

あなたが本当にすべきこと:あなたがボトルネックになっていることを理解してください。それはネットワーク、ファイルI / O、制約のチェック...そしてその問題を修正します。私にとって、説明計画を見ることは、ほとんどの場合、最初のステップです。

于 2011-10-04T13:54:30.513 に答える
1

使用している構成は何ですか? データがインポートされるデータベースには、それに結合されたスタンバイ データベースのようなものがありますか? もしそうなら、force_logging が有効になっている構成を持っている可能性が非常に高いですか? これを使用して確認できます

SELECT FORCE_logging from v$database;

表領域レベルで有効にすることもできます。

SELECT TABLESPACE_name,FORCE_logging from DBA_tablespaces

データベースが force_logging を実行している場合、またはテーブルスペースに force_logging がある場合、これはインポート速度に影響します。そうでない場合は、アーカイブ ログ モードが有効になっているかどうかを確認します。

SELECT LOG_mode from v$database;

その場合、アーカイブの書き込み速度が十分でない可能性があります。その場合は、オンライン REDO ログ ファイルのサイズを増やしてください。データベースがアーカイブ ログ モードを実行していない場合でも、ダイレクト パス挿入を使用していなければ、REDO ファイルに書き込む必要があります。その場合は、REDO をどれだけ速く書き込めるかを確認してください。通常、インデックスが役割を果たしていない場合は、200GB/h が十分に可能です。

パフォーマンスの低下を引き起こしているリンクを見つけることが重要です。それはインプットかもしれないし、アウトプットかもしれない。ここでは、出力に焦点を当てました。

于 2011-10-04T14:56:51.560 に答える
1

Jens Schauder が示唆したように、DB リンクを介してソースのレガシー システムに接続できる場合、ソース側で結合が必要ない限り、CTAS はパフォーマンスとシンプルさの間の最良の妥協点になります。

それ以外の場合は、SQL*Loader の使用といくつかの設定の微調整を検討する必要があります。ダイレクト パスを使用して、6 年前の ProLaint で 12 分で 1 億レコード (~10GB) をロードできました。

編集: Datamation ソート ベンチマーク用に定義されたデータ形式を使用しました。そのジェネレーターは、Apache Hadoop ディストリビューションで利用できます。ファイルの行ごとに 99 バイトのデータと改行文字を含む固定幅フィールドを持つレコードを生成します。上記の数値に使用した SQL*Loader 制御ファイルは次のとおりです。

OPTIONS (SILENT=FEEDBACK, DIRECT=TRUE, ROWS=1000)
LOAD DATA
INFILE 'rec100M.txt' "FIX 99"
INTO TABLE BENCH (
BENCH_KEY POSITION(1:10),
BENCH_REC_NBR POSITION(13:44),
BENCH_FILLER POSITION(47:98))
于 2011-10-04T14:32:20.900 に答える