提高對大批量資料時MV的重新整理效率

space6212發表於2019-04-15

最近接到一個需求:把某一個表的欄位設一個預設值,並把該欄位當前所有資料都更新為這個預設值。


這個需求做起來不是很難,難在資料的同步上。

我這裡的資料庫環境是這樣的:

外網資料庫:WAI
內網資料庫:NEI

為了開發測試方便、準確,每天會把外網的資料用MV的方式單向同步到內網上。MV的可更新主鍵MV,MV重新整理方式是FAST。

我們知道,可更新MV在資料重新整理後會將資料恢復至上次重新整理的狀態,也就是說丟失所有非重新整理造成的資料變化,為了恢復,可更新MV同時會生成一個USLOG$_XXX表來記錄對MV資料的改動;同時在源庫上會生成一個MLOG$_XXX表來記錄源表記錄的變化,以便MV能使用FAST的方式重新整理資料。

同時,我們還知道,當主表非lob型別資料發生變化時,無論變化的是一個欄位還是多個欄位,在MV重新整理的時候都是把整個記錄都重新整理過來。

回頭看需求,不難得出這樣一個結論:在主表更新資料可能不會很慢,但在重新整理資料時會非常慢,它消耗的資源會比MV做一次全重新整理還要大。(重新整理資料,刪除兩邊對應的LOG)。

其實如果知道原理的話,要提高完成這個工作的效率還是很簡單的。我採取的方法是:先重新整理一下MV,然後分別手工更新主表和MV的欄位,然後刪除由更新產生的MLOG$_XXX和USLOG$_XXX的記錄。

當然這種手段應該儘量少用了,只有在非常情況下采用,否則MV就失去其意義了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63734/,如需轉載,請註明出處,否則將追究法律責任。

相關文章