數據倉庫性能增強
Oracle 11g R1為數據倉庫環境提供了一些非常優秀的新特性,最值得一提的就是幾個新的分區方法,可以限制只為受影響的分區收集優化統計,並改進了SQL訪問顧問,它可以為大表提供分區建議。Oracle 11g R2建立在這些新特性上,改善了並行查詢性能,提高了數據倉庫抽取、轉換和加載操作的效率和性能,以更快的速度刷新物化視圖。
實例化限制(instance caging),Oracle 8i引入了數據庫資源管理器(Database Resource Manager,DRM),通過資源計劃指令它提供了對應用程序會話組的CPU資源利用率的限制,後來發行的數據庫版本大大改善了DRM限制的范圍和粒度,包括對特定資源消耗組限制I/O吞吐量,DRM最大的缺陷就不不能針對某個具體實例限制CPU利用率,比如僅限制那些CPU利用率太高的實例,只要一限制CPU利用率,相同服務器上的其它實例也會遭受限制。
現在即使遇到一個包含16,32甚至64顆CPU的數據庫服務器也不奇怪,這些服務器上面往往運行了幾十個數據庫實例共享這些CPU資源,但這樣做有嚴重的資源分配不均問題,Oracle 11g R2使用一個叫做實例化限制的新特性來克服這個問題,通過設置CPU_COUNT初始化參數為每個實例配置合適的值。DRM可以限制相同服務器上多個數據庫的CPU資源,確保不會出現一個數據庫實例消耗完所有CPU資源。
自動化並行度,數據倉庫應用程序通常會利用並行處理信息的優勢,迅速有效地處理數據,特別是在大表上查詢數據時,或者是一個非常復雜的連接查詢時經常使用並行查詢,在執行並行操作時,優化器應該使用並行度(Degree of Parallelism ,DOP),可以在查詢本身內指定(通過+PARALLEL優化器提示),也可以作為表或索引本身的一個屬性(通過它的PARALLEL屬性),但要精確地確定一個合適的DOP是有難度的,通常需要對表是如何連接,哪些索引對並行處理有益,同時執行哪些查詢都要有一個詳細的了解。
Oracle 11g R2為我們帶來了好消息,現在它可以自動為任何並行語句確定DOP,優化器使用兩個新的初始化參數:PARALLEL_DEGREE_POLICY和PARALLEL_MIN_TIME_THRESHOLD來計算自動化並行度(ADOP)。例如,如果PARALLEL_DEGREE_POLICY被設為AUTO,如果查詢確實能從並行操作受益,Oracle 11g R2優化器會首先確定一個合適的DOP值,如果查詢的預計執行時間超出了PARALLEL_MIN_TIME_THRESHOLD可接受的值(單位:秒),並且有足夠資源支持並行處理,它會允許查詢執行,否則就會延遲執行,直到有足夠的資源釋放出來,這樣可以防止一個並行查詢過度地消耗資源,例如,所有並行執行線程,或集群環境中的所有CPU都被其它非並行操作占用了,值得注意的是ADOP特性無法擴展到並行恢復或並行復制,它們只適用於並行查詢。
並行數據緩存,在內存中並行執行:許多Oracle數據庫用戶發現,Oracle真正應用集群(RAC)為OLTP應用程序提供了高可用性,同時也為數據倉庫應用程序提供了出色的性能表現,因為它可以在RAC集群的不同節點上的多個實例間執行並行查詢,Oracle 11g R2更好地利用了這一架構,因為它可以智能緩存在RAC集群數據庫內並行查詢使用的緩沖區。
如果新的PARALLEL_DEGREE_POLICY初始化參數被設為AUTO,然後執行一個並行查詢,Oracle 11g R2開發一個策略映射所有必需的數據塊(如數據或索引塊),以便更有效地在RAC數據庫實例的多個數據庫緩沖區高速緩存中有效地執行,如果在並行查詢執行期間,一個RAC實例需要讀取相同的緩沖區,它會自動使用這個映射確定哪一個遠程實例持有這個緩沖區,這對物理I/O有積極影響,因為它利用了整個數據庫所有實例的緩沖區緩存,分配給並行執行的查詢。
以大塊執行並行DML,一個簡單的例子就是發票模塊,它需要掃描來自多個事務源(如支票、信用卡或ETF)的數以百萬計的客戶付款,然後更新每張發票的平衡,以及客戶應付款的總額的平衡。
新的DBMS_PARALLEL_EXECUTE包提供了一套有趣的功能集,在這種情況下最有用,因為它允許大的DML語句並行執行,因此它可以按大塊處理數據,大塊可以簡單地基於選擇源表的rowid、主鍵值或任何程序定義的規則集定義。一旦定義了這些分塊規則,DBMS_SCHEDULER用於處理每個數據大塊,並提交修改的數據,在處理過程中,如果某個特定的大塊失敗,可以重新調度處理這個大塊。最後,Oracle 11g R2提供了多個新的並行任務元數據視圖(DBA_PARALLEL_EXECUTE_*),它們可以跟蹤DBMS_PARALLEL_EXECUTE定義的邊界,以及每個大塊的處理進度。
更快的物化視圖刷新,數據倉庫應用程序經常使用物化視圖,特別是在改寫查詢時,以便它能夠從物化視圖的小數據集獲得必要的信息,而不用直接查詢基礎表,當物化視圖的基礎表變化頻繁時,使用物化視圖日志將變化的數據填充到物化視圖中。Oracle 11g R2提供了從刷新進程外清洗物化視圖日志的功能,性能也因此得到了改善,特別是那些包含了求和,連接和二者皆有的物化視圖。同樣,在ON COMMIT FAST REFRESH子句上新的WITH COMMIT SCN指令告訴Oracle 11g R2使用基於SCN的物化視圖日志快速刷新。
Oracle_LOADER預處理程序,將舊系統數據加載到數據倉庫可能是一個昂貴的操作,因為使用SQL*Loader批量載入工具將數據載入數據庫需要大量的系統資源,包括數據倉庫表空間第一層存儲的成本,以及舊系統的平面文件的存儲成本。
因為ORACLE_LOADER訪問方法已經得到了增強,它可以對SQL*Loader操作和外部表進行預處理,新的PREPROCESSOR子句指定一個存在的DIRECTORY對象,以及該目錄下的可執行程序,由這個可執行程序預處理原有的文件數據,例如,使用gunzip解壓工具對其解壓,然後,Oracle_LOADER訪問方法從標准輸出流(stdout)中讀取數據,就好像是直接從原有的文件中讀取數據一樣。