2016-12-28 530 views
1

我們使用Informatica進行ETL,數據庫是Oracle 11g。重建索引需要5-6小時。可以減少嗎?

我們有一個每天加載的事實表(20億條記錄)。這個事實表有大約44個索引,事實表是分區的。

我們正在按照以下流程進行增量加載。

  1. 確定要從臨時表中加載的分區。通常將有大約750K - 900K記錄3到4個分區
  2. 創建一個臨時表,做事實表的分區的分區交換
  3. 填充從分段表中的增量數據到臨時表
  4. 再次做一個交換分區的事實表臨時表
  5. 重建周圍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

我們還有很多其他的工作正在運行,所以你認爲並行8不會影響CPU利用率和其他工作。 – XING

+0

如果你真的擔心從4開始平行並看看。我不知道你的環境是什麼,所以我不能肯定地說,但我認爲你會好起來的,特別是因爲這應該在幾個小時內完成。 – tbone

+0

以您擁有的核心數量的一半開始,並根據需要上下調整。您可能需要選擇一些妥協位置,以平衡您的索引工作及時完成對其他工作的影響。另外,請記住檢查存儲瓶頸。通過這個重大索引工作,甲骨文可以真的很難駕馭它。 – SQLmojoe

相關問題