如何使用Oracle并行作业处理

  • 格式:doc
  • 大小:1.41 MB
  • 文档页数:16

如何使用Oracle並行作業處理 Oracle並行作業處理(Oracle Parallel Execution)主要是將一個大型的作業分解為多個獨立的部份,使的原本必須循序完成的大的作業可以由多個分工作同時完成此項作業,也就是說一般SQL語法預設是在單顆CPU上以序列(Serial)方式執行,就算是此系統上擁有多顆CPU,對於一句SQL語法而言還是無法利用到其他的CPU,如此就無法有效的善用系統資源

而Oracle並行作業處理就是為了能夠讓SQL語法善用系統所擁有的資原因應而生,但需注意的是使用Oracle並行作業處理的時機與前提是在處理一個很大的作業,如線上分析系統(Online Analytical Processing;OLAP),較不適合使用在多使用者資料庫架構上,如線上即時交易系統(Online Transaction Processing;OLTP),因為在此資料庫架構下所有的資料庫作業都是屬於小且快的作業,因此系統本身資源負擔就已經相當大。

如果啟用Oracle並行作業處理將會導致某個使用者連線佔用了所有的系統資源,使得其他使用者連線不得不去等待,甚至於導致Oracle為了將工作分解為多個獨立的部份而全面使用Full Table Scan,基於這些種種原因,在OLTP架構下啟用Oracle並行作業處理反而可能會導致整體系統效能下降的情況,因此一般OLTP系統不建議使用。

而線上分析系統(Online Analytical Processing;OLAP)主要的作業是擷取、分析及彙總大量的資料,因此可以考慮使用Oracle並行作業處理,但還是再次強調系統資源要足夠,如果本身的CPU、記憶體或是磁碟數量不足, Oracle並行作業處理對於整體效能是沒有多大的幫助。本文將會針對Oracle並行作業處理的相關應用做詳盡的解說。

Oracle並行作業處理架構 Oracle並行作業處理(Oracle Parallel Execution)的架構基本上可分為兩類主要的角色也可稱為程序(Process)分工合作共同完成,而這兩個角色的功能分別依序如下: ●Slaver Process:在Oracle並行作業處理的架構下,主要是由一群Slaver Process將工作分散為多個小的作業同時執行,每一個Slaver Process負責一小部分,而這一群Slaver Process稱為一個Slaver Process Set,假設有一句SQL語法是針對Table1執行Full Table Scan,而這一群Slaver Process會將這全表格掃描作業分解為多個獨立的部分共同完成。 ●Parallel Execution Coordinator:Parallel Execution Coordinator以下簡稱Coordinator,當使用者執行SQL語法時,會由Coordinator將這句SQL語法的資料庫作業分為多個工作,同時對Oracle申請Slaver Process Set,並決定要由多少個Slaver Process來共同執行這項作業,除此之外Coordinator還會收集每個Slaver Process所得到的結果,並將這些結果會總起來回覆給使用者;此部分須注意的是當Coordinator分配多個Slaver Process去處理SQL語法時,這分配的數量稱為並行度(Degree of Parallelism;DOP),在一句SQL語法的執行過程中,最多有兩組Slaver Process Set,這兩組Slaver Process Set所擁有的Slaver Process數量一定是一模一樣,因此Slaver Process的數量最多可以是並行度的兩倍。

原則上Coordinator會將一個大資料庫作業劃分為多個工作單位並交由Slaver Process處理,而工作劃分方式一般有兩種,如果此物件是分區物件(Partition Object)如Partition Table,則會將以分區為劃分的工作單位交由Slaver Process作業,另一種是以物件的資料區塊範圍劃分,也就是說每個劃分的工作是以部份資料區塊為工作單位,所以每個Slaver Process就負責此物件的部份資料區塊進行作業。Slaver Process與Coordinator基本作業方式如圖1所示。

▲圖1:Oracle並行作業處理基本架構圖-1 圖1是以全表格掃描(Full Table Scan)為範例,但在一般資料庫的作業中除了全表格掃描外,其他的作業如排序作業等,也可以使用Oracle並行作業處理,也就是說當有其他作業的需求時,Oracle將會多出一組Slaver Process Set來處理相關的並行作業,舉一個例子當使用者執行的SQL語法有排序的需求時的執行計畫如圖2。 ▲圖2:基本排序執行計畫 以上的SQL語法中含有排序作業,由以上的執行計畫可得知Oracle再處理整個作業包含了3個部份分別是,全表格掃描、排序與返回結果給使用者,而當並行作業啟用時Coordinator會執行以下的步驟: 1. 解析SQL語法並決定並行度。 2. 決定與分配Slaver Process Set 。 3. 將相對應的SQL指令傳送送給Slaver Process,並進行相關的作業。 4. 將最終結果傳送給使用者。

而以上的範例將會有兩組Slaver Process Set,一組負責全表格掃描,另一組負責排序作業,整個並行處理架構如圖3所示。 ▲圖3:Oracle並行作業處理基本架構圖-2 以上的圖示顯示Coordinator•將會建立兩組Slaver Process Set分別是Slaver Process Set 1與Slaver Process Set 2,而每組的Slaver Process數量將由並行度決定,整個運作的過程首先是Slaver Process Set 1先對TABLE 1作全表格掃描,並將結果提供給Slaver Process Set 2建立雜湊表格(Hash Table)並進行相關的排序作業。

以這樣的運作方式來看Slaver Process Set 1就是所謂的資料產生者(Producer), Slaver Process Set 2就是資料消費者(Consumer),而中間的關連就是建立在雜湊表格(Hash Table),這兩組Slaver Process Set與Coordinator之間的資料傳遞就稱為Inter-Operation Parallelism,而每一組Slaver Process Set的內部並行度運作稱為Intra-Operation Parallelism。 當SQL語法有排序或表格連結等作業時,會有兩組Slaver Process Set存在,而資料產生者、資料消費者與Coordinator之間的資料傳遞都是在Oracle的記憶體中運作,也就是說Inter-Operation Parallelism的作業是在SGA中完成的,這塊在SGA中使用的記憶體區塊稱為Table Queue。

而這些作業對Table Queue有以下三種狀況: ●當資料產生者向Table Queue內寫資料時,此作業稱為PX SEND。 ●當資料消費者從Table Queue內讀取資料時,此作業稱為PX RECEIVE。 ●當Coordinator從Table Queue內讀取資料時,此作業稱為PX COORDINATOR。

以上的三種狀況可以由Oracle並行作業處理的執行計畫明確的顯示出來,如圖4所示。

▲圖4:Oracle並行作業處理執行計畫示意圖 以上Oracle並行作業處理執行計畫可分為三個部份來看,分別是ID 5、ID 5與ID 7為第一組,ID 2、ID 3與ID 4為第二組,ID 0與ID 1為第三組,而這三組的作業內容與順序依序如下: 1. 第一組主要負責對TABLE1執行全表格掃描,而ID 5此步驟就是將第一組所產生的結果傳遞給第二組,此組的運作是利用並行的方式執行。 2. 第二組主要是將這些結果作雜湊運算,而ID 2此步驟主要是將這雜湊運算的結果傳遞給第一組,此組的運作是利用並行運作,此組的運作是利用並行的方式執行。 3. 第三組主要就是Coordinator的運作,也就是將結果傳送給使用者,此組的運作是利序列(Serial)方式執行。

以上這三組的作業就是之前所提的Inter-Operation Parallelism作業,而Oracle並行作業處理執行計畫重點解說如下所列: ●Operation:此欄位顯示此SQL語法的執行作業,如同上面所敘述的PX SEND代表資料產生者向Table Queue內寫資料等等。 ●Name:此欄位顯示此執行作也所用到的物件名稱,TQxxxxx代表的是Table Queue。 ●TQ:此欄位代表Table Queue的值,相同的值所對應到的是同一組Slaver Process Set,而以上的範例顯示一共有兩組Slaver Process Set。 ●IN-OUT:此欄位代表各種作業之間的相互關係,與並行作業相關的訊息如下所列。 ●P.jpg'>S:全名是Parallel to Serial,代表此作業是由並行作業(Parallel)傳遞資料到序列作業(Serial),如Slaver Process到Coordinator。 ●P.jpg'>P:全名是Parallel to Parallel,代表此作業是由一組並行作業(Parallel)傳遞資料到另一組並行作業(Parallel),如Slaver Process Set 1到Slaver Process Set 2。 ●PCWP:全名是Parallel Combined With Parent,代表此並行作業是合併父作業,並由同一組Slaver Process Set完成,因此不需要Process之間的資料交換處理。 ●PCWC:全名是Parallel Combined With Child,代表此並行作業是合併子作業,並由同一組Slaver Process Set完成,因此不需要Process之間的資料交換處理。 ●PQ Distrib:此欄位代表資料產生者、資料消費者與Coordinator之間資料傳遞的方式,而主要資料發送傳遞的方式如下所列。 ●QC(ORDER):此類的資料傳遞方式是以循序的方式發送,而不是隨機的選擇,如以上的例子就是當排序完成後,資料產生者以循序的方式發送給Coordinator,一般來說此類的資料傳遞方式會出現在有ORDER BY的語句中。 ●QC(RANDOM):此類的資料傳遞方式是以隨機的選擇發送,也就是說資料產生者沒有任何的順序以隨機的方式的方式發送給Coordinator,一般來說此類的資料傳遞方式會出現在有ORDER BY的語句中。 ●RANGE:此類的資料傳遞方式是按照一定的規則劃分為多個區塊,分別發送給不同的資料消費者。 ●ROUND-ROBIN:此類的資料傳遞方式是每個資料產生者輪流的向每個資料消費者發送一筆資料,如此資料就可以很平均的分散在每一個資料消費者。 ●HASH:此類的資料傳遞方式是每個資料產生者都會利用雜湊運算得到一個雜湊值(Hash Value),並根據這個雜湊值來決定發送給不同的資料消費者。 ●BROADCAST:此類的資料傳遞方式是每個資料產生者把所產生的資料以廣播的方式發送給每一個資料消費者。