Oracle 11g R2新特性之?dāng)?shù)據(jù)倉(cāng)庫(kù)性能增強(qiáng)
原創(chuàng)【51CTO精選譯文】Oracle 11g R2于2009年9月正式發(fā)布,根據(jù)業(yè)內(nèi)人士的比較,此次增添的新特性令Oracle數(shù)據(jù)庫(kù)的使用更加方便。在這篇文章中,我們將介紹Oracle 11g R2的數(shù)據(jù)倉(cāng)庫(kù)性能增強(qiáng)的特性。
數(shù)據(jù)倉(cāng)庫(kù)性能增強(qiáng)
Oracle 11g R1為數(shù)據(jù)倉(cāng)庫(kù)環(huán)境提供了一些非常優(yōu)秀的新特性,最值得一提的就是幾個(gè)新的分區(qū)方法,可以限制只為受影響的分區(qū)收集優(yōu)化統(tǒng)計(jì),并改進(jìn)了SQL訪問顧問,它可以為大表提供分區(qū)建議。Oracle 11g R2建立在這些新特性上,改善了并行查詢性能,提高了數(shù)據(jù)倉(cāng)庫(kù)抽取、轉(zhuǎn)換和加載操作的效率和性能,以更快的速度刷新物化視圖。
實(shí)例化限制(instance caging),Oracle 8i引入了數(shù)據(jù)庫(kù)資源管理器(Database Resource Manager,DRM),通過資源計(jì)劃指令它提供了對(duì)應(yīng)用程序會(huì)話組的CPU資源利用率的限制,后來發(fā)行的數(shù)據(jù)庫(kù)版本大大改善了DRM限制的范圍和粒度,包括對(duì)特定資源消耗組限制I/O吞吐量,DRM***的缺陷就不不能針對(duì)某個(gè)具體實(shí)例限制CPU利用率,比如僅限制那些CPU利用率太高的實(shí)例,只要一限制CPU利用率,相同服務(wù)器上的其它實(shí)例也會(huì)遭受限制。
現(xiàn)在即使遇到一個(gè)包含16,32甚至64顆CPU的數(shù)據(jù)庫(kù)服務(wù)器也不奇怪,這些服務(wù)器上面往往運(yùn)行了幾十個(gè)數(shù)據(jù)庫(kù)實(shí)例共享這些CPU資源,但這樣做有嚴(yán)重的資源分配不均問題,Oracle 11g R2使用一個(gè)叫做實(shí)例化限制的新特性來克服這個(gè)問題,通過設(shè)置CPU_COUNT初始化參數(shù)為每個(gè)實(shí)例配置合適的值。DRM可以限制相同服務(wù)器上多個(gè)數(shù)據(jù)庫(kù)的CPU資源,確保不會(huì)出現(xiàn)一個(gè)數(shù)據(jù)庫(kù)實(shí)例消耗完所有CPU資源。
自動(dòng)化并行度,數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用程序通常會(huì)利用并行處理信息的優(yōu)勢(shì),迅速有效地處理數(shù)據(jù),特別是在大表上查詢數(shù)據(jù)時(shí),或者是一個(gè)非常復(fù)雜的連接查詢時(shí)經(jīng)常使用并行查詢,在執(zhí)行并行操作時(shí),優(yōu)化器應(yīng)該使用并行度(Degree of Parallelism ,DOP),可以在查詢本身內(nèi)指定(通過+PARALLEL優(yōu)化器提示),也可以作為表或索引本身的一個(gè)屬性(通過它的PARALLEL屬性),但要精確地確定一個(gè)合適的DOP是有難度的,通常需要對(duì)表是如何連接,哪些索引對(duì)并行處理有益,同時(shí)執(zhí)行哪些查詢都要有一個(gè)詳細(xì)的了解。
Oracle 11g R2為我們帶來了好消息,現(xiàn)在它可以自動(dòng)為任何并行語句確定DOP,優(yōu)化器使用兩個(gè)新的初始化參數(shù):PARALLEL_DEGREE_POLICY和PARALLEL_MIN_TIME_THRESHOLD來計(jì)算自動(dòng)化并行度(ADOP)。例如,如果PARALLEL_DEGREE_POLICY被設(shè)為AUTO,如果查詢確實(shí)能從并行操作受益,Oracle 11g R2優(yōu)化器會(huì)首先確定一個(gè)合適的DOP值,如果查詢的預(yù)計(jì)執(zhí)行時(shí)間超出了PARALLEL_MIN_TIME_THRESHOLD可接受的值(單位:秒),并且有足夠資源支持并行處理,它會(huì)允許查詢執(zhí)行,否則就會(huì)延遲執(zhí)行,直到有足夠的資源釋放出來,這樣可以防止一個(gè)并行查詢過度地消耗資源,例如,所有并行執(zhí)行線程,或集群環(huán)境中的所有CPU都被其它非并行操作占用了,值得注意的是ADOP特性無法擴(kuò)展到并行恢復(fù)或并行復(fù)制,它們只適用于并行查詢。
并行數(shù)據(jù)緩存,在內(nèi)存中并行執(zhí)行:許多Oracle數(shù)據(jù)庫(kù)用戶發(fā)現(xiàn),Oracle真正應(yīng)用集群(RAC)為OLTP應(yīng)用程序提供了高可用性,同時(shí)也為數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用程序提供了出色的性能表現(xiàn),因?yàn)樗梢栽赗AC集群的不同節(jié)點(diǎn)上的多個(gè)實(shí)例間執(zhí)行并行查詢,Oracle 11g R2更好地利用了這一架構(gòu),因?yàn)樗梢灾悄芫彺嬖赗AC集群數(shù)據(jù)庫(kù)內(nèi)并行查詢使用的緩沖區(qū)。
如果新的PARALLEL_DEGREE_POLICY初始化參數(shù)被設(shè)為AUTO,然后執(zhí)行一個(gè)并行查詢,Oracle 11g R2開發(fā)一個(gè)策略映射所有必需的數(shù)據(jù)塊(如數(shù)據(jù)或索引塊),以便更有效地在RAC數(shù)據(jù)庫(kù)實(shí)例的多個(gè)數(shù)據(jù)庫(kù)緩沖區(qū)高速緩存中有效地執(zhí)行,如果在并行查詢執(zhí)行期間,一個(gè)RAC實(shí)例需要讀取相同的緩沖區(qū),它會(huì)自動(dòng)使用這個(gè)映射確定哪一個(gè)遠(yuǎn)程實(shí)例持有這個(gè)緩沖區(qū),這對(duì)物理I/O有積極影響,因?yàn)樗昧苏麄€(gè)數(shù)據(jù)庫(kù)所有實(shí)例的緩沖區(qū)緩存,分配給并行執(zhí)行的查詢。
以大塊執(zhí)行并行DML,一個(gè)簡(jiǎn)單的例子就是發(fā)票模塊,它需要掃描來自多個(gè)事務(wù)源(如支票、信用卡或ETF)的數(shù)以百萬計(jì)的客戶付款,然后更新每張發(fā)票的平衡,以及客戶應(yīng)付款的總額的平衡。
新的DBMS_PARALLEL_EXECUTE包提供了一套有趣的功能集,在這種情況下最有用,因?yàn)樗试S大的DML語句并行執(zhí)行,因此它可以按大塊處理數(shù)據(jù),大塊可以簡(jiǎn)單地基于選擇源表的rowid、主鍵值或任何程序定義的規(guī)則集定義。一旦定義了這些分塊規(guī)則,DBMS_SCHEDULER用于處理每個(gè)數(shù)據(jù)大塊,并提交修改的數(shù)據(jù),在處理過程中,如果某個(gè)特定的大塊失敗,可以重新調(diào)度處理這個(gè)大塊。***,Oracle 11g R2提供了多個(gè)新的并行任務(wù)元數(shù)據(jù)視圖(DBA_PARALLEL_EXECUTE_*),它們可以跟蹤DBMS_PARALLEL_EXECUTE定義的邊界,以及每個(gè)大塊的處理進(jìn)度。
更快的物化視圖刷新,數(shù)據(jù)倉(cāng)庫(kù)應(yīng)用程序經(jīng)常使用物化視圖,特別是在改寫查詢時(shí),以便它能夠從物化視圖的小數(shù)據(jù)集獲得必要的信息,而不用直接查詢基礎(chǔ)表,當(dāng)物化視圖的基礎(chǔ)表變化頻繁時(shí),使用物化視圖日志將變化的數(shù)據(jù)填充到物化視圖中。Oracle 11g R2提供了從刷新進(jìn)程外清洗物化視圖日志的功能,性能也因此得到了改善,特別是那些包含了求和,連接和二者皆有的物化視圖。同樣,在ON COMMIT FAST REFRESH子句上新的WITH COMMIT SCN指令告訴Oracle 11g R2使用基于SCN的物化視圖日志快速刷新。
ORACLE_LOADER預(yù)處理程序,將舊系統(tǒng)數(shù)據(jù)加載到數(shù)據(jù)倉(cāng)庫(kù)可能是一個(gè)昂貴的操作,因?yàn)槭褂肧QL*Loader批量載入工具將數(shù)據(jù)載入數(shù)據(jù)庫(kù)需要大量的系統(tǒng)資源,包括數(shù)據(jù)倉(cāng)庫(kù)表空間***層存儲(chǔ)的成本,以及舊系統(tǒng)的平面文件的存儲(chǔ)成本。
#t#這些平面文件以壓縮格式存儲(chǔ)可以降低存儲(chǔ)成本,但在SQL*Loader將舊系統(tǒng)數(shù)據(jù)加載到數(shù)據(jù)倉(cāng)庫(kù)之前,這些文件可能是非經(jīng)壓縮的,意味著需要額外的存儲(chǔ)容納這些未壓縮的數(shù)據(jù),遺憾的是,這個(gè)限制也應(yīng)用到外部表,它們使用ORACLE_LOADER訪問方法直接從原有平面文件檢索數(shù)據(jù),許多Oracle用戶已經(jīng)使用外部表從原有的平面文件快速構(gòu)建了報(bào)表,甚至使用INSERT INTO … SELECT FROM語句進(jìn)行***次求和,其它消息型數(shù)據(jù)就直接加載到數(shù)據(jù)倉(cāng)庫(kù)中。
因?yàn)镺RACLE_LOADER訪問方法已經(jīng)得到了增強(qiáng),它可以對(duì)SQL*Loader操作和外部表進(jìn)行預(yù)處理,新的PREPROCESSOR子句指定一個(gè)存在的DIRECTORY對(duì)象,以及該目錄下的可執(zhí)行程序,由這個(gè)可執(zhí)行程序預(yù)處理原有的文件數(shù)據(jù),例如,使用gunzip解壓工具對(duì)其解壓,然后,ORACLE_LOADER訪問方法從標(biāo)準(zhǔn)輸出流(stdout)中讀取數(shù)據(jù),就好像是直接從原有的文件中讀取數(shù)據(jù)一樣。
【51CTO.com譯稿,非經(jīng)授權(quán)請(qǐng)勿轉(zhuǎn)載。合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com,且不得修改原文內(nèi)容?!?/p>
原文:The Second 5 top new features in Oracle Database 11g R2 作者:Jim Czuprynski
【編輯推薦】