




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Oracle Database 12c 并行執行基礎ORACLE DATABASE 12C 并行執行基礎目錄 HYPERLINK l _TOC_250004 引言1 HYPERLINK l _TOC_250003 并行執行概念2為什么采用并行執行?2并行執行原理2 HYPERLINK l _TOC_250002 Oracle 中的并行執行4處理并行 SQL 語句4內存中并行執行16 HYPERLINK l _TOC_250001 控制并行執行18啟用并行執行18管理并行度18管理并行操作的并發性21控制并行執行的初始化參數23 HYPERLINK l _TOC_250000 總結26引言近些年
2、,事務和數據倉庫環境中數據庫存儲的數據量一直呈指數級增長。除了數據量的巨大增長,用戶還需要更快地處理數據來滿足業務需求。并行執行對大規模數據處理至關重要。采用并行方法,只需幾分鐘(而不是幾小時或幾天)即可處理數百TB 的數據。并行執行使用多個進程完成一項任務。數據庫越是能夠有效地利用所有硬件資源(多個CPU、多個 IO 通道、多個存儲單元、集群中的多個節點),便會越高效地處理查詢和其他數據庫操作。大型數據倉庫應始終使用并行執行方法來實現良好的性能。OLTP 應用程序中的特定操作(如批量操作)也可在很大程度上受益于并行執行。本白皮書包括三大主題: 并行執行的基本概念 為什么應使用并行執行及其背后
3、的基本原則是什么。 Oracle 并行執行的實現和增強 在此,您將熟悉 Oracle 并行架構、學習 Oracle 特有的并行執行術語、了解如何控制和識別并行 SQL 處理的基本知識。 控制 Oracle 數據庫中的并行執行 最后這節介紹如何在 Oracle 環境中啟用和控制并行執行,讓您大致了解 DBA 需要考慮的問題。并行執行概念并行執行是一種常用的方法,通過將任務分為更小的子任務來提高操作速度。在本節中,我們將討論使用并行執行的基本原因及其基本概念。此外,我們還將詳細討論 Oracle 并行執行的一些概念。為什么采用并行執行?設想您的任務是統計某條街道中的汽車數量。有兩種方法來完成此任務
4、,一種方法是您可以自己穿過整條街道統計汽車數量,另一種方法是,您可以邀請朋友幫忙,你們兩個人各自從街道的兩端開始統計汽車數量直到兩人相遇, 然后將兩人的統計結果相加即可完成任務。假設您朋友的統計速度和您一樣快,那么你們完成統計街道中所有汽車數量這項任務所需的時間預計約為您單獨執行此工作所需時間的一半。如果這樣,則您的汽車數量統計操作量呈線性擴展;以兩倍的資源讓總處理時間減半。數據庫與統計汽車數量這個例子并沒有很大區別。如果您分配兩倍的資源量,所用處理時間是使用原先資源量時所用時間的一半,則操作量呈線性擴展。無論是統計汽車數量還是通過數據庫操作提供答案,并行處理的最終目標都是線性擴展。并行執行原
5、理在統計汽車數量的例子中,我們做了一些基本假設以實現線性擴展。這些假設反映了并行處理的一些原理。首先,我們選擇僅用兩個人完成統計工作。在此,我們確定了數據庫中稱之為并行度 (DOP) 的值。為了最快地解決問題,適合用多少人來執行這一任務?工作量越大,我們所用人員就會越多,當然,如果街道較短并且只有 4 輛汽車,則我們應避免任何并行,因為與其確定誰從哪里開始,不如直接統計汽車數量來的快。在此例中,我們確定用兩個人來統計和協調的“開銷”是勞有所值的。在數據庫中,數據庫引擎應基于操作的總開銷來做出這個決定。其次,在汽車示例中,我們將工作分為兩等份,每個人在街道的一端開始,并且假設每個人的統計速度相同
6、。對于數據庫中的并行處理也是如此:第一步是將所處理的數據分為多個大小差不多的塊,從而使它們的處理時間相同。通常,使用某種形式的散列算法來均勻地劃分數據。并行處理的這種“數據分區”通常有兩種基本方法,但這兩種方法從根本上是不同的。主要區別在于是否使用物理數據分區(布局)作為基礎,進而作為并行執行工作的靜態先決條件。這兩種概念上根本不同的方法分別稱為全共享架構和無共享架構。圖 1:全共享與無共享在無共享系統中,系統物理上劃分為一些單獨的并行處理單元。每個處理單元具有自己的處理能力(CPU 內核)和自己的存儲組件;它的 CPU 內核只負責自己存儲上的單獨數據集。訪問特定數據段的唯一方法是使用擁有此數
7、據子集的處理單元。此類系統通常也稱為大規模并行處理 (MPP) 系統。數據分區是這類系統的基本先決條件。為了實現良好的負載分配,無共享系統必須使用某種散列算法在所有可用處理單元間均勻、靜態地劃分數據。必須根據系統最初的創建情況來確定控制數據布局的數據分區策略。因此,無共享系統在其系統中引入了強制、固定的最小并行度,以便執行涉及表掃描的操作;固定并行度完全依賴于創建數據庫或對象時的固定靜態數據分區:并行處理單元的數量決定了訪問所有數據分區的最小并行度。大多數非 Oracle 數據倉庫系統都是無共享系統。Oracle 數據庫依賴于全共享架構。此架構不需要任何預定義的數據分區來實現并行;可以無限制地
8、從所有處理單元訪問所有數據;操作的并行度與實際數據存儲無關。然而,通過使用 Oracle Partitioning,Oracle 數據庫可以基于同樣的處理范式進行操作,從而提供與無共享系統完全相同的并行處理功能。值得注意的是,它在提供這類功能的同時對數據布局中包含的固定并行訪問并沒有限制。因此,Oracle 除了具有無共享系統的并行功能,它還可以獨立于底層數據布局,以各種方式和程度并行執行幾乎所有的操作。使用全共享架構,Oracle 可以通過強于無共享供應商的并行執行功能超集,實現靈活的并行執行和高并發性,同時不會使系統過載。Oracle 中的并行執行Oracle 數據庫提供了無需人工干預即可
9、并行執行復雜任務的功能??梢圆⑿袌绦械牟僮靼ǖ幌抻冢?數據加載 查詢 DML 語句 RMAN 備份 對象創建,例如索引或表創建 優化器統計信息收集本白皮書僅著重探討 SQL 并行執行,其中包括并行查詢、并行 DML(數據操作語言)和并行 DDL(數據定義語言)。本文側重于 Oracle Database 12c,但本文的信息也適用于 Oracle Database 11g,除非明確說明。處理并行 SQL 語句當您在 Oracle 數據庫中執行一條 SQL 語句時,該語句被分解為各個步驟或行源,它們在執行計劃中標識為不同的行。下面是一個簡單的只涉及一個表的 SQL 語句及其執行計劃的示例。此
10、語句返回 CUSTOMERS 表中的客戶總數:SELECT COUNT(*) FROM customers c;圖 2:對 CUSTOMERS 表的 COUNT(*) 串行執行計劃一個更復雜的串行執行計劃可能包括多個表之間的聯接。在下面的示例中,將請求有關客戶購買的信息。這需要CUSTOMERS 表和 SALES 表之間的聯接。SELECT c.cust_first_name, c.cust_last_name, s.amount_sold FROM customers c, sales sWHERE c.cust_id=s.cust_id;圖 3:顯示兩表聯接的更復雜的串行執行計劃如果您并行
11、執行一條語句,則 Oracle 數據庫將并行執行盡可能多的單獨步驟,并在執行計劃中反映這一點。如果以并行方式重新執行上面的兩個語句,我們可以得到下面的執行計劃:圖 4:對 CUSTOMERS 表的 COUNT(*) 并行執行計劃圖 5:客戶購買信息,并行計劃這些計劃看起來與前面的頗為不同,這主要是因為,現在的并行處理帶來了以前所沒有的一些額外的后勤處理步驟。Oracle 數據庫中的 SQL 并行執行基于幾個基本概念。下一節將討論這些概念來幫助您了解數據庫中的并行執行, 并提供如何閱讀并行 SQL 執行計劃的基礎知識。查詢協調器 (QC) 和并行執行 (PX) 服務器Oracle 數據庫中的 S
12、QL 并行執行基于協調器(通常稱為查詢協調器,簡稱 QC)和并行執行 (PX) 服務器進程的原則。QC 是啟動并行 SQL 語句的會話,PX 服務器是代表啟動會話并行執行工作的各個進程。QC 將工作分配給 PX 服務器,并且可能還須執行那些無法并行執行的極少的一部分工作(主要是后勤工作)。例如,包含 SUM() 運算的并行查詢需要最后將每個 PX 服務器各自計算得到的各個小計全部相加,這由 QC 完成。在上面的并行執行計劃中,很容易就能找到標識為“PX COORDINATOR”的 QC(例如上面圖 5 中的行 ID 1)。充當并行 SQL 操作的 QC 的進程是實際用戶會話進程本身。PX 服務
13、器從全局可用的 PX 服務器進程池中獲得,并在指定操作存在期間分配給該操作(后文將討論該設置)。我們的示例并行計劃(圖 4、圖 5)中 QC 項下顯示的所有工作都由 PX 服務器完成。圖 6:使用查詢協調器和一組 PX 服務器進程的并行執行在操作系統級很容易就能識別出 PX 服務器進程,例如在 Linux 上,它們是標識為 ora_p* 的進程:圖 7:使用“ps -ef”在 Linux 操作系統級看到的 PX 服務器進程回到統計汽車數量的例子中:您和您的朋友在充當 PX 服務器,可以有第三個人來扮演 QC 的角色,這個人會告知您和您的朋友去統計汽車數量。您在街道上執行的工作與使用 SQL 和
14、圖 8 中所示的執行計劃在數據庫內執行的操作完全相同:唯一的區別是,在本示例中,數據庫計算的是客戶數,沒有道路兩側可以讓它用來分配工作;稍后我們將在“粒度”一節討論工作分配。您和您的朋友將去統計各自一側的汽車數量;這相當于行 ID 4、ID 5 和 ID 6 的操作,其中 ID 5 相當于告知你們每個人僅統計自己一側街道上的汽車數量。圖 8:執行計劃中顯示的 QC 和 PX 服務器進程統計完您自己的一側后,你們每個人向第三人 (QC) 告知各自的小計(行 ID 3),于是第三人將這些小計加起來得到最終結果(行 ID 1)。這是從 PX 服務器(執行實際工作的進程)到 QC 的移交,以便最終“組
15、裝”結果,從而將結果返回到用戶進程。使用 SQL Monitor1 有助于輕松識別 PX 服務器完成的工作 特定操作前面的許多小藍“人”或小紅“人”,與串行執行相比,后者只有單個小綠人。生成者/使用者模型繼續我們的汽車數量統計示例,設想現在的工作是按汽車顏色統計汽車數量。如果您和您的朋友各自負責街道一側,你們每個人可能看到相同的顏色并針對每種顏色進行小計,但這不是這條街道的特定顏色車的整個結果。您可能會去記下所有這些信息并將其告訴給第三人(“負責人”)。但是,這個可憐的負責人然后必須自己總結所有結果 如果街道中所有汽車的顏色都各不相同,將會怎樣?第三人將會完全重做您和您的朋友剛剛做過的工作。為
16、了并行執行每種顏色的統計工作,您只是邀請另外兩個朋友幫忙:這兩個朋友和你們一起在街道中間行走,一個人統計您和您朋友各自查看的一側的所有暗色汽車,另一個人統計所有亮色汽車(假設這種“汽車分色”大致將信息分成兩半)。每當統計新的一輛汽車時,您會將新遇到的汽車告知負責此顏色的人員 您生成信息,根據顏色信息重新分配此信息,而顏色統計者使用此信息。最后,兩個統計顏色的朋友向負責人 (QC) 告知結果,工作就完成了;我們有兩組并行工作人員,每組有兩個朋友攜手執行一部分工作。數據庫同樣以這種方式工作:為了高效地并行執行語句,多組 PX 服務器配對工作:一組生成行(生成者),一組使用行(使用者)。例如,對于
17、SALES 和 CUSTOMERS 表之間的并行聯接,一組 PX 服務器讀取表中的數據并將數據發送給另一組,另一組接收數據(使用者)并聯接兩個表,如圖 9 所示,DBMS_XPLAN 包的標準計劃輸出。1 SQL Monitor 是在 Oracle Database 11g 中引入的,它為詳細監視和分析 SQL 執行步驟提供了一個非常高效的方法。有關詳細信息,請參見 Oracle技術網中 HYPERLINK /technetwork/database/focus-areas/manageability/sqlmonitor-084401.html 有關 SQL Monitor 的頁面。圖 9:
18、生成者和使用者在執行計劃中查看 TQ 列可以識別出同一組 PX 服務器處理的操作(行源)。如圖 9 所示,第一個 PX 服務器組(Q1,00) 并行讀取 CUSTOMERS 表并生成記錄行以發送到 PX 服務器組 2 (Q1,02),PX 服務器組 2 使用這些記錄, 然后聯接來自 SALES 表 (Q1,01) 的記錄。SQL Monitor 以交錯顏色顯示處理并行語句的不同 PX 服務器組,從而可以輕松識別工作單元以及必須重新分配數據的地方的邊界。每當數據從生成者分發給使用者時,作為數據輸出您將會在 NAME 列中看到格式為 : TQxxxxx(表隊列 x)的項。現在,請不要考慮圖 9 中
19、的其他列的內容。這種生成者/使用者模型會嚴重影響為給定并行操作分配的 PX 服務器的數量:生成者/使用者模型預計每個并行操作具有兩組 PX 服務器,因此 PX 服務器數量是請求的并行度 (DOP) 的兩倍。例如,如果圖 9 中的并行聯接運行時的并行度為 4,則此語句將使用 8 個 PX 服務器,分別是 4 個生成者和 4 個使用者。只有在以下情況,PX 服務器才不會配對工作:語句是非?;镜恼Z句,只需一組 PX 服務器即可并行完成整個語句。例如,SELECT COUNT(*) FROM customers; 只需一組 PX 服務器(參見圖 4)。粒度粒度是訪問數據時的最小工作單元。Oracle
20、 數據庫使用全共享架構,從存儲的角度看,這意味著配置中的任何 CPU 內核都可以訪問任何數據段;這是 Oracle 和大多數其他數據庫供應商之間在架構方面最基本的不同之處。不同于這些其他系統,Oracle 可以并且將會只根據查詢需求選擇這一最小工作單元。Oracle 數據庫用于分配工作以便并行執行的基本機制是塊范圍 所謂基于塊的粒度。這些塊可能駐留在存儲中, 或者在內存中并行執行的情況下駐留在內存中,這將在本文稍后討論。此方法是 Oracle 獨有的,并且與對象是否已分區無關。對底層對象的訪問被劃分為許多個粒度,這些粒度分發給各個 PX 服務器以便進行處理(當某個 PX 服務器完成一個粒度的工
21、作時,將分發下一個粒度)。圖 10:客戶統計示例中的基于塊的粒度粒度數量始終遠高于請求的 DOP , 以便在 PX 服務器之間平均分配工作。圖 10 所示的操作“PX BLOCKITERATOR”表示對所有生成的塊范圍粒度進行迭代。雖然基于塊的粒度是大多數操作實現并行執行的基礎,但有一些操作可以受益于底層分區數據結構因而可以利用各個分區作為工作粒度。使用基于分區的粒度,對于單個分區,只使用一個 PX 服務器來處理其所有數據。如果操作中訪問的(子)分區數量至少等于 DOP(如果各個(子)分區的大小可能存在偏差,則遠高于 DOP 較為理想),則 Oracle 優化器將考慮基于分區的粒度。使用基于分
22、區的粒度的最常見操作是智能化分區聯接(稍后將進行討論)。根據 SQL 語句和 DOP,Oracle 數據庫確定是基于塊的粒度還是基于分區的粒度可產生更優的執行;您無法影響此行為。在汽車統計示例中,可以將街道的一側(甚至長街道的街區)視為等同于基于塊的粒度。將現有數據量(街道)細分為多個物理段,PX 服務器(您和您的朋友)各自對這些物理段進行處理。如果長街道有許多街區,并且只有您和您朋友參與工作,則每人負責一半的街區(“粒度”)。如果您和三個朋友一起工作,則每人負責四分之一的街區。您可以選擇與您一起工作的朋友數量,您的統計能力將擴展。如果我們將街道看做是“靜態分區的”,只有左右兩側分區,那么您只
23、能邀請一位朋友幫忙:您的其他朋友則無事可做。純粹的無共享系統正是使用這樣的靜態方法工作的,從中可以看出這種架構的局限性。數據重新分配并行操作(除了最基本的并行操作之外)通常需要重新分配數據。需要重新分配數據以便執行諸如并行排序、聚合和聯接之類的操作。在塊粒度級別,并不知道單個粒度中包含的實際數據;塊粒度只是物理塊,沒有邏輯內涵。因此,只要后續操作依賴實際內容,就需要重新分配數據。在汽車示例中,汽車顏色至關重要,但您不知道(甚至無法控制)哪些顏色的汽車停泊在街道上哪些位置。根據另外兩個朋友所負責的顏色,您將有關每種顏色的汽車數量的信息重新分配給這兩個朋友,使他們對其負責的顏色統計總數量。數據重新
24、分配在各個 PX 服務器組之間發生,而這些 PX 服務器或者運行于一臺機器上,或者運行于 Real Application Clusters (RAC) 系統的多臺機器(節點)上。當然,在后一種情況下,使用互連通信重新分配數據。數據重新分配不是 Oracle 數據庫所獨有的。實際上,這是并行處理的一個最基本的原則,提供并行功能的每個產品都使用它。但是,Oracle 提供的功能的基本不同之處和優勢是并行數據訪問(已在前面“粒度”一節中講過)以及所需的數據重新分配不受任何特定硬件架構或數據庫設置(數據分區)的限制。與全共享系統類似,無共享系統也需要數據重新分配,除非操作能夠完全依靠智能化分區聯接(
25、本節后面將進一步說明)。在無共享系統中,無法受益于智能化分區聯接的并行操作(例如一個簡單的基于兩個不同聯接鍵的三方表聯接)總是需要數據重新分配,因此總是大量使用互連通信。由于 Oracle 數據庫能在節點的環境中啟用并行執行, 因此并行操作不必總是使用互連通信,從而避免了潛在的互連瓶頸。下一節將通過無需任何輔助數據結構(例如索引或物化視圖以及其他優化)的簡單表聯接示例,介紹 Oracle 的數據重新分配功能。串行聯接在串行兩方聯接中,單個會話讀取涉及的兩個表并執行聯接。在此示例中,我們假設聯接涉及到兩個大型表CUSTOMERS 和 SALES。數據庫使用全表掃描來訪問兩個表,如前面的圖 3 所
26、示。在串行聯接中,單個串行會話掃描兩個表并執行完全聯接。圖 11 描述了串行聯接。圖 11:串行聯接并行聯接以并行方式處理同一簡單的兩方聯接時,為了確保恰當地劃分數據以便進行后續并行處理,必須對行進行分配。在該示例中,PX 服務器根據塊范圍掃描每個表的各個物理部分,并且為了完成聯接,必須根據聯接鍵值在 PX 服務器組之間分配行;您必須確保相同的聯接鍵值由同一個 PX 服務器處理,這樣才能確保每行只處理一次。圖 12 描述了之前圖 9 中顯示的 DOP 為 2 的并行聯接的數據分配。由于該聯接需要兩組 PX 服務器,實際上有四個PX 服務器分配給了這個查詢,PX1 和 PX2 讀取表,PX3 和
27、 PX4 執行聯接。PX1 和 PX2 使用塊范圍粒度并行讀取兩個表,然后每個 PX 服務器根據聯接鍵的值將其結果集分配給后續并行聯接運算符;來自兩個表的相同的聯接鍵值必須發送到執行聯接操作的同一 PX 服務器,以確保數據正確聯接。圖 12:簡單并行聯接的數據重新分配。有多種數據分配方法。以下是最常見的一些方法:散列:散列分配在并行執行中很常見,其目的是依據散列函數實現對各個 PX 服務器的均等工作分配。散列分配是大多數數據倉庫系統使用的基本并行執行實現機制。下面的圖 13 顯示了一個使用散列分配方法的執行計劃。這實際上是圖 12 所示的聯接的執行計劃。圖 13:散列分配的執行計劃假設該計劃的
28、 DOP 為 2,一個 PX 組(PX1 和 PX2)讀取 CUSTOMERS 表,對聯接列應用散列函數并將行發送給另一個 PX 組中的 PX 服務器(PX3 和 PX4),通過這種方式,根據計算的散列值,PX3 得到了一些行,PX4 得到了其他行。然后,PX1 和 PX2 讀取 SALES 表,對聯接列應用散列函數并將行發送給另一個 PX 組(PX3 和PX4)。PX3 和 PX4 現在都有了來自兩個表的匹配的行,可以執行聯接了。每個表的分配方法可以在該計劃的 PQ Distrib 和 Operation 列中看出,在第 5 行和第 9 行中,PQ Distrib顯示兩個表的 HASH,而
29、Operation 顯示 PX SEND HASH。廣播:當聯接操作中的兩個結果集之一遠小于另一個結果集時,便會發生廣播分配。數據庫將較小的結果集發送到所有 PX 服務器以確保各個服務器能夠完成其聯接操作,而不是分配兩個結果集中的行。對聯接操作的較小表進行廣播,其優勢在于,根本不必重新分配大型表。下面的圖 14 顯示了一個使用廣播分配方法的執行計劃。圖 14:廣播分配的執行計劃假設該計劃的 DOP 為 2,一個 PX 組(PX1 和 PX2)讀取 CUSTOMERS 表,并將它的所有結果集廣播給另一個 PX 組(PX3 和 PX4)。PX3 和 PX4 現在可以讀取 SALES 表并執行聯接,
30、因為它們都有了來自 CUSTOMERS 表的所有行。在該執行計劃中,我們可以從第 5 行中看出分配方法,該行的 PQ Distrib 列顯示 BROADCAST,Operation 列顯示 PX SEND BROADCAST。范圍:范圍分配通常用于并行排序操作。各個 PX 服務器處理各個數據范圍,這樣 QC 不必進行任何排序,而是僅以正確順序顯示各個 PX 服務器的結果。圖 15 顯示了一個對簡單 ORDER BY 查詢使用范圍分配方法的執行計劃。圖 15:范圍分配的執行計劃假設該計劃的 DOP 為 2,一個 PX 組(PX1 和 PX2)讀取 SALES 表,PX1 和 PX2 將其所讀的行
31、發送給 PX3 或PX4,具體發送給誰,則取決于 ORDER BY 子句中的列值。PX3 和 PX4 都有各自的數據范圍,它們對自己獲取的行排序并將結果發送給 QC,QC 不需要進行任何排序,因為 PX3 和 PX4 已經對行進行了排序。QC 只需保證先返回來自這個 PX 服務器的行:該服務器處理的范圍是必須先返回的范圍。例如,如果基于 time_id 按最新數據在前排序,PX3 擁有一月份之前的數據范圍,PX4 擁有所有較新數據,那么 QC 首先將 PX4 的排序結果返回給最終用戶然后再返回來自 PX3 的結果,以確完整結果的正確排序。在該執行計劃中,我們可以在第 5 行中看到分配方法,PQ
32、 Distrib 列顯示 RANGE,Operation 列顯示 PX SEND RANGE。鍵:鍵分配可確保將各個鍵值的結果集聚集在一起。這是一種優化,主要用于部分智能化分區聯接(參見下文)以確保只需分配聯接中的一方。圖 16 顯示了一個使用鍵分配方法的執行計劃。圖 16:鍵分配的執行計劃根據聯接列對 CUSTOMERS 表散列分區,而 SALES 表不分區。該計劃顯示,一個 PX 組(PX1 和 PX2)讀取SALES 表,并基于 CUSTOMERS 表的分區將行發送給另一組 PX 服務器(PX3 和 PX4)。采用這種方法,PX3 和PX4 可以同時處理不同的分區,因為它們從 SALES
33、 獲得了它們需要聯接的分區的所有匹配行。PX3 和 PX4 不必對行進行任何重新分配。在該執行計劃中,我們可以在第 5 行中看到分配方法,PQ Distrib 列顯示 PART (KEY),Operation 列顯示PX SEND PARTITION (KEY)。混合散列:混合散列方法是在 Oracle Database 12c 中引入的,是一種自適應分配技術,該技術直到執行時才基于結果集的大小決定最終分配方法。新混合散列分配前面設置了一個稱為 STATISTICS COLLECTOR 的新的計劃步驟,它統計從 PX 服務器返回的行數,并根據某個最大閾值檢查該計數。如果達到閾值,則基于散列分配
34、來分配行更經濟高效。如果整個結果集的大小低于該閾值,則廣播數據。圖 17 顯示了一個使用混合散列分配方法的執行計劃。圖 17:混合散列分配的執行計劃在該執行計劃中, 我們可以在第 5 行和第 10 行中看到分配方法, PQ Distrib 列顯示 HYBRID HASH ,Operation 列顯示 PX SEND HYBRID HASH??梢栽诘?6 行中看到新的計劃步驟 STATISTICS COLLECTOR。作為數據分配方法的一個變化,您可以在 Real Application Clusters (RAC) 數據庫的并行執行計劃中看到 LOCAL 后綴。LOCAL 分配是針對 RAC
35、環境的一種優化,可最大程度減少節點間并行查詢的互連流量。例如,您可以在執行計劃中看到 BROADCAST LOCAL 分配,表示行集在本地節點上生成并且只發送到此節點上的 PX 服務器。并行智能化分區聯接即使數據庫試圖根據優化器統計信息選擇最好的分配方法,PX 組之間的行分配也需要進程間,有時是實例間通信。而完全智能化聯接或部分智能化聯接等技術則可以盡量減少甚至避免數據分配,從而可能極大地提高并行執行性能。如果聯接中訪問的至少一個表基于聯接鍵進行了分區,則數據庫可以決定使用智能化分區聯接。如果兩個表都基于聯接鍵進行了同樣的分區,則數據庫可以使用完全智能化分區聯接。否則,可以使用部分智能化分區聯
36、接,其中一個表在內存中進行動態分區,然后進行完全智能化分區聯接。圖 18:完全智能化分區聯接不需要數據分配。智能化分區聯接不需要任何數據分配,因為各個 PX 服務器將處理兩個聯接表的同等分區。圖 18 顯示了與圖 12 相同的聯接語句,但這次是基于聯接列 cust_id 對表進行同等的分區,在這個例子中,CUSTOMERS 表基于 cust_id 列進行散列分區,而 SALES 表首先按日期列進行范圍分區,然后再按 cust_id 列進行散列子分區。如圖所示,PX1 讀取 SALES 表范圍分區的所有子分區,然后再讀取 CUSTOMERS 表的同等散列分區(這在圖 19 的執行計劃中表示為 S
37、ALES 表的表掃描之上的 PARTITION RANGE ALL 迭代器);兩個表基于聯接鍵的同等分區保證了在這些分區之外不會有匹配的聯接行。PX 服務器只需讀取這些匹配分區,就能完成全部聯接。對于 PX2 也是如此,對于這兩個表的任何同等分區同樣如此。請注意,智能化分區聯接使用基于分區的粒度, 而不是基于塊的粒度。比較圖 12,您還可以看到,智能化分區聯接使用一個 PX 服務器組。而不是兩個。圖 19 顯示了這個聯接語句的執行計劃。圖 19:智能化分區聯接的執行計劃Operation 和 PQ Distrib 列指示沒有數據分配,而 TQ 列顯示只使用了一個 PX 組。智能化分區聯接是無共
38、享系統的基本實現方法。無共享系統只要可以利用智能化分區聯接,通??闪己脭U展。因此,無共享系統中分區的選擇(分配)與表的訪問路徑一樣重要。在 MPP 系統中,不使用智能化分區操作的操作通常也不能良好擴展。內存中并行執行在傳統并行處理中,數據會繞過所有共享緩存直接傳輸到 PX 服務器進程的內存 (PGA) 中,而與傳統并行處理不同的是,內存中并行執行(內存中 PX)會利用共享內存緩存 (SGA) 來存儲數據以便進行后續并行處理。內存中 PX 利用當今數據庫服務器中不斷增長的內存;這對大規模集群環境來說尤其有用,在這種環境中,聚合的總內存量可以達數 TB,即使單個數據庫服務器“只”擁有數十或數百 G
39、B 的內存。使用內存中 PX,Oracle 可以在 Real Application Clusters (RAC) 環境中使用聚合的服務器內存緩存,從而有效地跨所有節點的內存緩存分配的對象。這確保了后續并行查詢將從所有節點的緩存讀取數據,而不是從存儲讀取數據,從而可以極大提高處理速度。Oracle Database 12c 版本 引入了 Oracle Database In-Memory 選件,這是專門針對內存中處理而設計的列式內存中數據存儲,用以支持實時海量數據分析。其壓縮列格式及針對內存中技術優化的數據處理算法提供了最佳的內存中處理。我們推薦的內存中處理方法就是利用 Oracle 新的數據
40、庫內存中技術。有關該特性的詳細信息,請參見白皮書 HYPERLINK /technetwork/database/in-memory/overview/twp-oracle-database-in-memory-2245633.html “Oracle 數據庫內存中技術”。未配置 Database In-Memory 選件的系統也可以利用內存中 PX,但無法使用內存中壓縮列存儲及優化的內存中算法。從 Oracle Database 11g 第 2 版開始,數據庫就對內存中 PX 使用標準的數據庫緩沖區緩存,這也是聯機事務處理使用的緩存。因為 OLTP 與并行操作使用同一緩存,因此它們之間存在著
41、“爭搶”緩沖區緩存的風險,為了確保并行操作不會占用整個緩存,Oracle 數據庫將內存中 PX 能用的緩沖區緩存百分比限制為 80%。使用該模型,內存中 PX 的好處可能會受到限制,具體取決于并行處理的數據量以及 OLTP 應用程序的內存需求。具有較少數據量和具有更多混合(及變化的)負載特征的最常見的系統會從該方法受益。為了拓寬內存中 PX 的適用性 無論是在適合使用內存中處理的對象的大小方面,還是為了提供最佳的全表掃描感知的緩存,Oracle Database 12c 引入了自動大表緩存 (ABTC),它會專門為并行內存中處理保留部分專用緩沖區內存。使用 ABTC,會保留一部分數據庫緩沖區緩
42、存來在內存中存儲大對象(或大對象的一部分),這樣就可以有更多的查詢能利用內存中并行執行。適合緩存的對象的大小最多可以是保留的可用內存的三倍。ABTC 使用優化段和基于熱度的算法,確保可用緩存得到最佳使用。要啟用使用 ABTC 的內存中 PX,必須設置下面兩個參數: PARALLEL_DEGREE_POLICY:必須設置為 AUTO 或 ADAPTIVE DB_BIG_TABLE_CACHE_PERCENT_TARGET:指定為內存中 PX 保留的數據庫緩沖區緩存的百分比。使用內存中 PX 和 ABTC,數據庫將決定語句訪問的對象是否應該緩存在 ABTC 中。對象可以是表、索引,在分區對象的情況
43、下,也可以是一個或多個分區。這一決定根據一組高級試探而做出,這些試探包括對象的大小、對象訪問的頻率,以及 ABTC 的大小。如果該對象符合這些條件,內存中處理將被啟用,訪問的對象將緩存在 ABTC 中。在具有多個節點的 RAC 環境情況下,對象將被分段(分為多個段)并分配給所有參與節點;每個分段將確定地映射(關聯)到一個特定的 RAC 節點并存儲在該節點的緩沖區緩存中。分段可以是某個表的塊的物理范圍,在分區對象的情況下,也可以是各個分區。映射分段之后,對此分段的所有后續訪問都將在此節點上發生。如果從集群中的任意節點發出需要相同數據的后續并行 SQL 語句,則數據所在的節點上的 PX 服務器將訪
44、問自己的ABTC 緩存中的數據,并且只將結果返回到發出語句的節點;并沒有通過緩存融合在節點之間移動數據。如果決定不緩存對象,則通過直接路徑 IO 訪問該對象。圖 20:某個分區表跨兩節點 RAC 集群的內存中并行執行的示例數據分配控制并行執行為了以高效的方式使用并行執行,您需要考慮如何啟用它、如何指定語句的并行度 (DOP),以及如何在可能同時運行多個并行語句的并發環境中使用它。啟用并行執行默認情況下,Oracle 數據庫對查詢和 DDL 語句均啟用并行執行。對 DML 語句,您需使用 ALTER SESSION 語句在會話級啟用它。ALTER SESSION ENABLE PARALLEL
45、DML;管理并行度即使啟用了并行執行,對于是否以并行方式運行一個語句的決定還取決于一些其他因素。您可以使用 Oracle 的自動并行度 (Auto DOP) 框架讓 Oracle 完全控制對并行度的選擇和管理,也可以人工控制并行度的選擇。使用 AutoDOP 是 Oracle 推薦的在 Oracle Database 12c 環境中控制并行執行的方法。自動并行度 (Auto DOP)使用 Auto DOP,數據庫將自動決定是否應并行執行某個語句以及應使用的 DOP。系統根據語句的資源需求(也稱“開銷”)來決定是否使用并行執行并選擇 DOP。如果語句預計花費的時間小于 PARALLEL_MIN_
46、TIME_THRESHOLD(默認為 AUTO,相當于 10 秒),則該語句將串行運行。如果預計花費時間大于 PARALLEL_MIN_TIME_THRESHOLD,則優化器根據執行計劃中所有掃描操作(全表掃描、索引快速全掃描、聚合、聯接等)的開銷來確定語句的理想 DOP。Oracle Database 12c 使用所有操作的 CPU 開銷和 IO 開銷,而 Oracle Database 11g 則只使用 Auto DOP 計算的 IO 開銷。根據語句的開銷,理想的 DOP 可能變得很大。為了確保您不會為單個語句分配太多的并行執行服務器,優化器將對實際使用的 DOP 設置上限。該上限通過參數
47、 PARALLEL_DEGREE_LIMIT 來設置。此參數的默認值是 CPU,這意味著最大 DOP 受系統的默認 DOP 的限制。用于推算默認 DOP 的公式為:PARALLEL_THREADS_PER_CPU * SUM(CPU_COUNT across all cluster nodes)優化器將其理想 DOP 與 PARALLEL_DEGREE_LIMIT 進行比較,并取較小值。ACTUAL DOP = MIN(IDEAL DOP, PARALLEL_DEGREE_LIMIT)將 PARALLEL_DEGREE_LIMIT 設置為特定數值可以控制 Auto DOP 將會在系統范圍使用的
48、最大 DOP。對不同用戶組或應用程序的更細粒度控制,Oracle Database Resource Manager (DBRM) 允許為各個資源用戶組設置不同的DOP 限制。除了通過 PARALLEL_DEGREE_LIMIT 設置系統范圍的上限 DOP , 我們還建議使用 Database Resource Manager 來對最大 DOP 進行細粒度控制。下圖從理論上說明沒有 Database Resource Manager 時如何在系統范圍決定是否并行執行語句以及要使用的DOP。使用 Database Resource Manager 時,理想 DOP 的計算將變為:ACTUAL D
49、OP = MIN(IDEAL DOP, PARALLEL_DEGREE_LIMIT, DBRM limit)圖 21:沒有 Database Resource Manager 時,Auto DOP 的決定過程(理論上)執行計劃的備注部分顯示和說明了所選的實際 DOP 。對于使用 explain plan 命令和實際執行的語句(V$SQL_PLAN 中存儲的信息)解釋的語句都提供了該信息。例如,下面顯示的執行計劃是在 CPU_COUNT =32、PARALLEL_THREADS_PER_CPU = 2 和 PARALLEL_DEGREE_LIMIT = CPU 的情況下在單實例數據庫上生成的。在
50、備注部分,您會注意到所選 DOP 為 64。在此系統上,并行度 64 是 PARALLEL_DEGREE_LIMIT 允許的最大 DOP (2 * 32)。圖 22:執行計劃的備注部分中顯示的自動并行度Auto DOP 由初始化參數 PARALLEL_DEGREE_POLICY 控制,并通過 LIMITED、AUTO 或 ADAPTIVE 設置來啟用??梢栽谙到y級或會話級應用此初始化參數。此外,還可以使用提示 PARALLEL 或 PARALLEL(AUTO) 對特定 SQL 語句啟用 Auto DOP:SELECT /*+ parallel(auto) */ COUNT(*) FROM cu
51、stomers;手動設置并行度PARALLEL_DEGREE_POLICY 設置為 MANUAL 時,Auto DOP 功能被禁用,最終用戶必須自己管理系統中的并行執行使用。您可以在會話、語句或對象級請求所謂的默認 DOP 或 DOP 的特定固定值。DEFAULT 并行度DEFAULT 并 行 度 使 用 一 個 公 式 基 于 初 始 化 參 數 確 定 DOP 。 在 單 實 例 數 據 庫 中 , 該 計 算 公 式 為PARALLEL_THREADS_PER_CPU * CPU_COUNT , 在 RAC 環 境中 , 為 PARALLEL_THREADS_PER_CPU *SUM(C
52、PU_COUNT)。因此,在每個節點設置為 CPU_COUNT=8 和 PARALLEL_THREADS_PER_CPU=2 的四節點集群上,默認 DOP 將為 2 * 8 * 4 = 64。您可以使用下列方法之一獲得 DEFAULT 并行度。設置對象的并行子句。ALTER TABLE customers PARALLEL;使用語句級提示 parallel(default)。SELECT /*+ parallel(default) */ COUNT(*) FROM customers;使用對象級提示 parallel(table_name, default)。SELECT /*+ parall
53、el(customers, default) */ COUNT(*) FROM customers;注意,上面第一種方法中顯示的表設置以人工模式為您提供默認 DOP,即當 PARALLEL_DEGREE_POLICY 設置為MANUAL。DEFAULT 并行度針對單用戶負載,旨在使用最多資源(假設使用的資源越多,操作就會越快完成)。數據庫不檢查并行度是否有意義,即不檢查并行度是否會為您提供任何可擴展性。例如,您可以運行 SELECT * FROM emp; 使用前面介紹的系統上的默認并行度,但您在返回的這 14 個記錄中將看不到任何可擴展性。在多用戶環境下,DEFAULT 并行度將迅速用完系統
54、資源,沒有留下可用資源以便其他用戶并發執行并行語句。固定并行度 (DOP)與 DEFAULT 并行度不同,可以從 Oracle 數據庫請求特定 DOP。您可以使用下列方法之一獲得固定 DOP。為對象設置固定 DOP。ALTER TABLE customers PARALLEL 8 ; ALTER TABLE sales PARALLEL 16 ;使用語句級提示 parallel(integer)。SELECT /*+ parallel(8) */ COUNT(*) FROM customers;使用對象級提示 parallel(table_name, default)。SELECT /*+ p
55、arallel(customers, 8) */ COUNT(*) FROM customers;注意 , 上面第一種方法中顯示的表設置只在人工模式和限制模式下為您提供固定 DOP , 即當 PARALLEL_DEGREE_POLICY 設置為 MANUAL 或 LIMITED 時。在 AutoDOP 模式(AUTO 或 ADAPTIVE)下,將忽略任何表修飾。還要注意,對第一種方法的示例設置,Oracle 將按以下方式選擇請求的 DOP: 只訪問 CUSTOMERS 表的查詢使用請求的 DOP 8。 訪問 sales 表的查詢將請求 DOP 16。 訪問 sales 和 customers
56、兩個表的查詢將以 DOP 16 進行處理。Oracle 使用更高的 DOP2在并行處理需要兩組 PX 服務器分別用于生成者/使用者處理的情況下,所分配的服務器的數量總會是所請求的 DOP的兩倍。管理并行操作的并發性無論預期負載模式如何,您都希望確保 Oracle 的并行執行功能在您的環境中得到最佳使用。這意味著除了控制并行度還有三個基本任務:確保系統不會因并行處理過載確保任何特定語句都能獲得所需的并行資源遵循對不同的用戶組可能不同的優先級。Oracle 的 Auto DOP 框架不僅無需任何用戶干預就能全面控制并行處理的使用, 而且滿足前兩個需求。與Database Resource Mana
57、ger(負責第三個需求)相結合,Oracle 提供了全面的負載管理框架,可以滿足世界上最復雜的混合負載需求。管理并行執行 (PX) 服務器進程的數量Oracle 數據庫將進程從 PX 服務器進程池中分配給并行操作。通過 PARALLEL_MAX_SERVERS 參數設置池中允許的最大 PX 服務器進程數。這是一個硬性限制,用于防止系統因太多進程而過載。默認情況下,此參數設置為5 * concurrent_parallel_users * CPU_COUNT * PARALLEL_THREADS_PER_CPUconcurrent_parallel_users 的值按如下方法計算: 如果設置了
58、MEMORY_TARGET 或 SGA_TARGET 初始化參數,則數量為concurrent_parallel_users = 4。 如果沒有設置 MEMORY_TARGET 和 SGA_TARGET,則檢查 PGA_AGGREGATE_TARGET。如果設置了PGA_AGGREGATE_TARGET 的值,則 concurrent_parallel_users = 2。如果沒有設置PGA_AGGREGATE_TARGET 的值,則 concurrent_parallel_users = 1。當池中的所有進程都分配出去后,需要并行執行的新操作要么串行執行,要么以降級的 DOP 來執行,因而這
59、些操作的性能會降低。為了防止達到 PARALLEL_MAX_SERVERS 進而操作串行執行或降級執行,Auto DOP 通過參數PARALLEL_SERVERS_TARGET 使用一個額外的限制設置。默認情況下,此參數設置為:2 * concurrent_parallel_users * CPU_COUNT * PARALLEL_THREADS_PER_CPUPARALLEL_SERVERS_TARGET 是使用語句排隊之前可用于運行并行語句的 PX 服務器進程的數量。將它設置為小于 PARALLEL_MAX_SERVERS,以確保每個并行語句可獲得所有需要的 PX 服務器資源并防止因 PX
60、 服務器而使系某些語句并不遵循此規則,例如并行 CREATE TABLE AS SELECT;對這些例外情況的討論超出本白皮書的范圍。統 過 載。 注意, 即 使已 激活語 句 排隊 , 所有 串 行( 非并行 ) 語句 也會立 即 執行 。 還要 注 意 , 僅當在PARALLEL_DEGREE_POLICY 設置為 AUTO 或 ADAPTIVE(該強制初始設置是為了調用 Auto DOP 的全部功能)下運行時才需要考慮 PARALLEL_SERVERS_TARGET 這個更低的限制。圖 23:一個顯示 PX 服務器進程數量限制的示例配置使用語句排隊管理并發并行處理SQL 語句以特定 DO
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年煙草廣東公司筆試試題
- 2024年保山市隆陽區辛街鄉中心衛生院人員招聘考試真題
- 籃球扣籃培訓課件圖片
- 女生心肺復蘇培訓課件
- 中年男性健康評估核心標準
- 中國糖尿病健康管理規范
- 糖尿病患者護理業務查房
- 《喚醒護理有事共讀》讀后感
- 兒童腰穿術后護理
- 應對氣候變化的環境政策與實踐
- 第十一講中華一家和中華民族格局底定(清朝中期)-中華民族共同體概論專家大講堂課件
- 水泵工考試題目及答案
- 2024年廣東省中考數學試卷【含解析】
- 客戶服務流程規范操作手冊
- 2025河湖健康評價規范
- 電氣配盤培訓
- 手術室基本知識
- DB34∕T 3262.1-2018 普通公路養護預算 第一部分:編制辦法
- 深圳市龍崗區科技創新局2025年招考普通雇員高頻重點提升(共500題)附帶答案詳解
- 2025年湖南湘西州花垣縣事業單位招聘工作人員71人歷年高頻重點提升(共500題)附帶答案詳解
- 2025年高中歷史畢業會考全部基礎知識復習提綱(完整版)
評論
0/150
提交評論