2013-07-30 42 views
4

我一直在研究使用物化視圖進行數據聚合和報告,主要集中在事務處理(使用Oracle數據庫)。當前的報告系統依賴於一系列視圖,這些視圖隱藏了應用程序的許多複雜數據邏輯。這些意見在被調用時會給系統帶來沉重的負擔。物化視圖日誌的事務性能影響

我們有興趣使用「快速刷新」進行增量更新,以便在報告中使用之前執行一些複雜的查詢邏輯;然而,組織中存在一個問題,物化視圖日誌(這是快速刷新所需的)將影響我們當前在數據庫中的事務性能。這種表現對我們的組織非常重要,因此任何變化都有很大的恐懼。

這裏是物化視圖日誌類型的一個例子,我們需要實現:

create materialized view log on transaction 
    with rowid, sequence(transaction_id,account_id,order_id,currency_id,price,transaction_date,payment_processor_id) 
    including new values; 

我們將不會使用「上提交」更新條款,而是在「按需」條款根據我們的理解,這會產生性能影響。

實現這種類型的日誌記錄是否會影響數據庫事務性能?我想它必須稍微影響性能,因爲在提交中有一個附加的寫入過程(對日誌),但在Oracle文檔中我找不到任何對此的引用。任何關於這個問題的文獻或建議將不勝感激。

感謝您的幫助!

回答

7

是的,會有影響。物化日誌需要同步維護,以便事務需要爲物化視圖日誌中的每個在基表中修改的行插入新行。這種影響有多大影響很大程度上取決於系統。如果您的系統是I/O綁定的,並且您已經對其進行了優化,以便將更改物理寫入基表是等待時間的重要組成部分,則其影響將遠大於系統受CPU限制並且大部分等待時間花在讀數據或執行計算上。

如果您真的關心OLTP系統的性能,將報告卸載到不同服務器上的其他數據庫是有意義的。您可以使用Streams(或GoldenGate,如果您可以承擔附加許可證)將數據複製到報告服務器,這將比實例化視圖對源的影響更小,因爲重做信息可以異步讀取(並且可以在報告服務器而不是將該工作負載放到生產服務器上)。然後,您可以在報告服務器上定義物化視圖,以便它們不會對OLTP服務器產生任何影響。或者您可以創建一個邏輯備用數據庫作爲您的報告服務器並在那裏創建物化視圖。無論哪種方式,將報告工作負載從生產服務器移出並以異步方式讀取重做數據將保護生產服務器的性能。

+0

感謝您的回答。我相信,將報告工作量轉移到生產環境是解決此問題的最佳實踐解決方案。如果只有物化視圖可以基於重做日誌的異步讀取進行刷新。 –