4

注:Oracle 11gR2標準バージョン(パーティション化なし)

したがって、約2,700万件のレコードを含むテーブルからレポートを作成するプロセスを構築する必要があります。私が直面しているジレンマは、このテーブルは変更できないサードパーティのテーブルであるため、このテーブルから独自のインデックスを作成できないという事実です。そこで、マテリアライズドビューを使用して実験を開始しました。このビューでは、独自のインデックス、または基本的には複製であり、必要に応じて切り捨てて再入力する物理テーブルを作成できます。

MATビューの利点は、基本的に「ライブ」テーブルから取得することです。したがって、使用前に更新する限り、不一致を心配する必要はありません。問題は、更新にかなりの時間がかかるように見えることです。 。次に、物理テーブルアプローチを試してみることにしました。ここでは、切り捨てと再入力を試み(約10分かかります)、次にインデックスを再構築します(さらに10、ギブまたはテイクします)...「新しい」レコードのみで更新も試みましたを実行することによって:

INSERT... SELECT where NOT Exists (Select 1 from Table where PK = PK) 

インデックスや並列処理などに関係なく、ほぼ10分かかります...

誰かがこの量のデータ(これは増え続けるでしょう)を処理し、うまく機能し、効率的に機能するアプローチを見つけなければなりませんでしたか?

ビューが機能しないようです....プライマリテーブルのインデックスを微調整できないため、これら2つのオプションが残っているので、ヒントの提案をいただければ幸いです...このプロセスの全体的な目的は次のとおりです。レポート作成を「高速化」するためですが、ある領域でパフォーマンスが向上している場合、移動する必要のあるデータの量を考えると、他の領域では失われてしまいます。他に他のオプションはありますか:

  1. テーブルの切り捨て/入力、インデックスの再構築
  2. PKが存在しないプライマリテーブルからセカンダリテーブルにデータを入力します
  3. マテリアライズド・ビュー(リフレッシュ、索引の再構築)
  4. ライブテーブルからプルするビュー(新しいインデックスなし)

提案を事前に感謝します.....

2番目のオプションで挿入を実行するときにインデックスなどを使用できないようにすると、「選択としてテーブルを作成...」を実行すると「挿入...選択」よりもパフォーマンスが向上するかどうかを誰かが知っていますか?

4

2 に答える 2

1

この種のタスクに対する非常に単純なアプローチについては、多くのことが言えると思います。テーブルに NOLOGGING を設定して、インデックスを無効化/再構築せずに、重複テーブルへの切り捨てとダイレクト パス (追加) 挿入を検討してください。ダイレクト パス挿入には、インデックスの構築に必要なデータを一時セグメントに記録し、後続の複数のフル テーブル スキャンを回避するため、ロード後に複数のインデックス再構築を実行するよりもおそらく効率的なインデックス メンテナンス メカニズムが関連付けられています。

インデックスの無効化/再構築を試してみたい場合は、クエリの並列処理を行わずにすべてのインデックスを同時に再構築してみてください。物理的なフル スキャンは 1 回しか使用されないため、残りのスキャンは「寄生的」になります。テーブルブロックをメモリから読み取ります。

複製テーブルをロードするときは、レポートで一般的に使用される述語がより少ないブロックにアクセスできるように、select 内の行の順序を検討してください。たとえば、日付範囲でよくクエリを実行する場合は、日付列で並べ替えます。このレポート テーブルの作成に費やされた少しの余分な時間は、レポート クエリの実行時間の短縮に取り戻せることに注意してください。

テーブルの圧縮も検討してください。ただし、高価な Advanced Compression オプションがない限り、ダイレクト パス挿入を使用してロードしている場合に限ります。インデックス圧縮とビットマップ インデックスも考慮する価値があります。

また、レポート テーブルを分析しないことを検討してください。通常、レポート クエリでは、従来の統計では十分に推定できない複数の述語が使用されます。いずれにせよ、カーディナリティを適切に推定するには、動的サンプリングに頼る必要があります。

于 2012-12-05T10:31:21.877 に答える
0

「Create Table As Select」は、より少ない取り消しを生成します。それは利点です。データが「挿入」されると、インデックスも維持され、パフォーマンスに悪影響が及びます。

于 2012-12-05T10:10:25.567 に答える