Oracle並行操作——從串列到並行____Oracle

來源:互聯網
上載者:User

並行(Parallel)操作特性,是Oracle為更充分利用伺服器硬體處理資源,提高特定大資料量操作效率,應對海量生產資料而推出的一種技術特性。通常,我們進行的SQL處理都是單進程操作,對應單個CPU操作單元。所謂的並行操作,就是在軟硬體條件允許的情況下,Oracle調用多個處理單元分別進行處理,最後匯合結果的過程。對一些SQL進行有計劃的並行操作,可以顯著提高系統操作速度。

 

1、海量資料的困局

 

互連網絡時代給世界帶來很多變化,其中一項就是資訊的爆炸,資料呈幾何級數增長。資料庫隨之進入海量、洋級時代,TB級資料庫已經越來越頻繁的出現在各類型應用情境中。開發人員和DBA就不得不面對一個困局,如果處理海量資料。

 

 

在傳統時代,我們最常藉助的一個最佳化手段是索引。通過檢索較少的資料區塊,擷取到合格資料行rowid。“索引進入執行計畫,替代全表掃描”成為我們最佳化的重要導向。但是,索引路徑不是使用者最終體驗。隨著資料量的增大(單表上G),即使我們的執行計畫很完美,檢索索引+資料區塊定位的時間損耗可能依然不能滿足客戶需求。其次,一些特定系統類別型(如OLAP系統),可能就是要進行全表掃描操作,對所有資料進行檢索處理。這些場合下,傳統的索引中心最佳化就無用武之地了。

 

 

在電腦科學中,“分治”這種古老的思想一直扮演著重要地位,無論是在軟體的演算法還是在硬體的體系。近年來,硬體技術,特別是多核CPU、多CPU電腦的逐漸普及,使得多核電腦、伺服器開始出現在公司專屬應用程式領域。多核CPU和多CPU本質上就是多處理單元並行的基礎。將一個任務劃分為若干個子任務,交由不同的處理單元進行同時處理,之後將結果集合匯總,是通用的單任務多處理進程模型。應該說,並行技術是建立在軟硬體技術基礎之上的,其中硬體技術是一個決定要素。

 

2、Oracle的平行處理

 

Oracle平行處理(Parallel Processing)特性主要是針對SQL語句處理的並行。目前Oracle提供支援並行的操作包括如下類型:

 

ü        並行查詢操作;

ü        並行DDL。對資料對象的DDL操作;

ü        並行DML。進行並行的資料更新修改;

 

在具體的應用情境上,有如下情境:

 

ü        資料表、索引範圍掃描的查詢;

ü        批量增加、修改和刪除操作;

ü        資料表、索引對象的建立;

ü        “DBMS_STATS”收集統計量;

ü        備份復原管理員Recovery Manager的使用;

 

在Oracle中,一共包括三種進程Process類型,分別為客戶進程Client Process、服務進程Server Process和後台進程Background Process。其中,進行資料區塊讀取、修改寫入等實際操作的都是服務進程Server Process。Server Process是客戶進程在資料庫執行個體上的代理進程,保持著一對一的關係。由此,一般的SQL語句都是單進程串列操作的。

 

Oracle並行操作涉及的過程同一般並行操作的模型基本相似,包括處理單元和協調單元兩類進程組成。首先,處理的單一任務劃分為若干子任務。在協調進程(Coordinator)的作用下,並行操作被劃分為若干子任務,分別傳遞給多個並行服務進程進行處理。之後,各個進程將處理結果進行匯總,交付給協調進程進行組合,作為統一的結果返回。

 

並處處理在Oracle中是一個配置過程,包括很多參數配置和概念要素。其中最重要的兩個概念就是並行度和並行伺候進程池。下面分別來介紹兩個概念和相關的設定項目。

 

3、並行度和並行伺候進程池

 

並行度DOP(Degree Of Parallel)定義了進行並行操作時並行流的個數。DOP可以理解成進行平行處理時候,劃分的平行處理單元個數。但是,在實際的情況看,進行平行處理的進程個數往往是DOP的兩倍,也就是一個並行流實際上是兩個處理進程在進行處理工作。這樣的配置通常是為了實現進程之間的協調合作,緩解各個處理環節上的速度不匹配現象。

 

並行度DOP是Oracle並行操作中一個重要的配置參數。目前的Oracle版本中,支援手工配置和自動設定DOP兩種方式。如果是手工指定並行度,就需要在SQL語句上,通過hint來制定並行度的個數。自動設定DOP的含義是Oracle根據當前實際負載和並行進程池的狀況,經過計算自動的出的適應性並行度。下面是一些Oracle中與並行度相關的參數。

 

 

SQL> show parameter parallel

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

fast_start_parallel_rollback         string      LOW

parallel_adaptive_multi_user         boolean     TRUE

parallel_automatic_tuning            boolean     FALSE

parallel_degree_limit                string      CPU

parallel_degree_policy               string      MANUAL

parallel_execution_message_size      integer     16384

parallel_force_local                 boolean     FALSE

parallel_instance_group              string     

parallel_io_cap_enabled              boolean     FALSE

parallel_max_servers                 integer     10

parallel_min_percent                 integer     0

parallel_min_servers                 integer     0

parallel_min_time_threshold          string      AUTO

parallel_server                      boolean     FALSE

parallel_server_instances            integer     1

parallel_servers_target              integer     4

parallel_threads_per_cpu             integer     2

recovery_parallelism                 integer     0

 

 

上面參數的含義,會在本系列中逐漸使用和介紹。

 

DOP是一個設定項目,實際的並行工作還需要真是存在的進程完成。從上文的背景介紹中,一個session只對應一個Server Process,進行操作處理實際都需要Server Process來完成。平行處理中,Oracle引入了並行伺候進程池的概念。並行伺候進程池是一個進程的集合,針對需要進行平行處理的SQL操作,會從處理池中分配出適當數量的服務進程來進行處理。

 

一些與並行服務進程相關的參數,如下:

 

SQL> show parameter parallel_m

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

parallel_max_servers                 integer     10

parallel_min_percent                 integer     0

parallel_min_servers                 integer     0

 

 

 

4、一個並行Query的樣本

 

下面針對一個大資料量表,示範一下並行SQL的執行計畫。首先還是環境準備:

 

 

SQL> select * from v$version where rownum<2;

 

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

 

SQL> select count(*) from t;

 

  COUNT(*)

----------

     1110542

 

 

使用並行操作,最常用的方式是通過Hint進行指定(當然也可以通過對象Parallel屬性指定)。下面是沒有使用並行和使用並行兩個執行計畫的差異示範。

 

 

SQL> set linesize 10000;

SQL> set pagesize 10000;

SQL> explain plan for select * from t;

已解釋。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.