2016-12-28 7 views
1

Informatica for ETLを使用しており、データベースはOracle 11gです。インデックスの再構築には5〜6時間かかります。それを減らすことはできますか?

毎日ロードされるファクトテーブル(20億レコード)があります。このファクトテーブルには約44のインデックスがあり、ファクトテーブルはパーティション化されています。

インクリメンタルロードの場合は、以下の手順に従います。

  1. ステージングテーブルからロードするパーティションを特定します。通常、そこの周りの750Kになります -
  2. は一時テーブルを作成して3〜4パーティションについて900Kレコードとパーティション用のファクトテーブルからパーティション交換を行う
  3. 一時テーブルにステージング表からの増分データを移入
  4. 8〜10時間の周りに総ロード時間があるインデックス

を再構築し、一時テーブルからファクトテーブルに再びパーティション交換を行うと再構築インデックスは5-7の周りに(時間の大部分を取っています時間)。インデックスは影響を受けるパーティションに対してのみ再構築され、すべてのインデックスはローカルインデックスです。

誰でもインデックスを再構築するためのより速い方法を提案できますか?

+1

44インデックスはテーブルにありますか?それは私が思うにはあまりにも多くのビットです。 – GurV

+0

大きなテーブルで、各パーティションの範囲とインデックスでうまく区切られています。すべてのカウントは44. – XING

+0

"...と各パーティションのインデックス" - それぞれが同じフィールドを持つ各パーティションに別々のインデックスを作成しているとしますか? –

答えて

4

パラレルを再構築し、完了したらパラレルに戻すことができます。次のようなもの(簡略化された例):

Alter index SOMEOWNER.SOMEIDX rebuild 
Parallel 8; 

Alter index SOMEOWNER.SOMEIDX noparallel; 
+0

他にも多くのジョブが実行されていますので、並列化を行うとCPU使用率や他のジョブに影響を与えないと思いますか? – XING

+0

あなたが本当に心配しているなら、4のパラレルで始めるといいかもしれません。私はあなたの環境が何であるかわからないので、私は確かに言うことはできませんが、あなたがうまくいくと思います。 – tbone

+0

コアの数の半分から始め、必要に応じてアップ/ダウンを行います。インデックスジョブと他のジョブへのインパクトを時間的にバランスさせるバランスの取れたポジションを選ぶ必要があります。また、ストレージにボトルネックがないかチェックしてください。オラクルは、この大きな再索引の仕事でそれを本当に難しくすることができます。 – SQLmojoe

関連する問題