oracle RAC環境分散式計算(prallel能力)設定 --轉載
在RAC中,我們可以通過設定跨節點並行,將並行操作分佈到RAC中的不同節點同時進行,以便發揮整個RAC環境的最大運算能力。在RAC中設定跨節點並行主要是通過設定parallel_instance_group和instance_groups這兩個引數進行的。
instance_groups這個引數主要是設定該節點例項是否屬於某一個例項組,這個例項組的命名可以根據你的需要隨便命名,而沒有嚴格的限制。每個節點可以設定多個不同的例項組名,例項組名用逗號隔開,比如:instance_groups=crm,erp,oltp。這樣只要其他節點的instance_groups引數中有設定成一個一樣的名字,就表示這個節點也屬於這個例項組。比如在一個4節點RAC的環境中,A節點的instance_groups設定為(crm,erp,oltp),B節點設定為(crm,oltp),C節點設定為(crm,erp),D節點設定為(crm,erp,oltp),那麼就有A、B、C、D這4個節點共同組成crm這個例項組,A、C、D這3個節點組成erp這個例項組,A、B、D這3個節點組成oltp這個例項組。
parallel_instance_group設定的值為instance_groups裡面設定的值,表明這個節點上面進行的並行操作可以跨越哪些例項組。回到上面的例子,假如A節點的parallel_instance_group設定為crm,由於crm這個例項組的成員是A、B、C、D四個節點都有,那麼A節點上的並行操作就可以跨越所有的4個節點。如果A節點的parallel_instance_group設定為erp,那麼A節點並行操作就可以跨越A、C、D這3個節點。如果一個節點的parallel_instance_group設定的引數在instance_groups中沒有設定,那麼這個節點的並行操作將只會在本節點進行,假如B節點的parallel_instance_group設定為erp,那麼它上面的並行操作將不會跨節點進行。
預設情況下這兩個引數都為空,那麼並行操作預設將會是跨節點並行的。當然並不是設定了這兩個值就一定會發生跨節點並行,是由優化器和RAC的負載均衡機制共同決定一個並行操作是否跨節點並行,需要跨越例項組中的哪幾個節點並行還是例項組的所有節點並行,每個節點分配多少個並行程式工作。由於跨節點並行還有內部互聯通訊的開銷,因此並不一定就會比單節點並行會快多少,只有那些很大的並行操作可能才需要到跨節點並行。這個可以根據測試再進行變更。在我們執行的實際案例中,由於跨節點並行的機制比較複雜,有時候會觸發一些BUG,甚至並行度為DEFAULT的表在進行跨節點並行DML時一個並行程式死掉導致整個節點當機。推薦的做法是系統級別的parallel_instance_group這個引數不要設定,不同的程式在部署之前做好測試工作,看是否需要跨節點並行。由於parallel_instance_group是可以在會話級別設定的,可以修改一些需要跨節點並行的程式在執行之前先執行alter session set parallel_instance_group=……一下,然後只限制這些程式跨節點並行。
PARALLEL_INSTANCE_GROUP是並行查詢使用的組的名字,如果這個引數是空的,那麼說明PQ可以使用資料庫的所有例項。如果指定了某個名字,那麼說明PQ只能在指定的INSTANCE GROUP裡進行。
PARALLEL_INSTANCE_GROUP引數是可以在會話級動態修改的,因此通過調整這個引數,可以控制並行查詢的範圍。這個特性對於雙節點RAC和多節點RAC都十分有用。
要注意的是在不同的ORACLE版本中,這2個引數的設定是不同的,因此要了解詳細的資訊,請參考相關手冊。比如在很多版本中,如果設定了一個不存在的GOUP,那麼該SQL會使用序列方式執行,而不使用PQ,在有些版本中,錯誤的PARALLEL_INSTANCE_GROUP會報錯。
通過真正應用叢集利用並行操作
作者:Kevin Conlon
如何在 RAC 環境中使用並行操作,以利用您的叢集體系結構中的所有伺服器硬體
<!--use same subhed/sub-subhed treatment as previously-->自從 7.1 版本第一次引入並行操作後,通過 Oracle Database 來使用該特性已為大家所熟悉。在傳統的基於 UNIX 的對稱多處理器 (SMP) 體系結構上並行執行 SQL 語句的能力大大提高了伺服器的利用率,並加快了大型的資源密集型操作的執行速度。在真正應用叢集 (RAC) 體系結構中,並行 SMP 部署等價於使用叢集中所有可用的伺服器。
在本文中,我將概述通過 RAC 來使用並行操作,以利用向外伸縮的叢集體系結構。
並行目標和選項
並行的目標是利用資料庫平臺體系結構的所有可用的資源,以加快總體的處理速度。這些資源包括記憶體、處理器和 I/O。
可以在任意向上伸縮或單系統 SMP 映象環境中執行的並行操作也同樣可以在向外伸縮的 RAC 叢集環境中執行。這些操作包括:
- 查詢(基於全表掃描)
- Create Tabel As 特性
- 索引構建
- 分割槽表上的 DML 操作(插入、更新、刪除)
- 資料載入
可以使用標準 SQL 提示來執行上述列表中的操作 1 到 4,或通過在物件級的 INIT.ORA 引數設定並行度來執行,這個引數可以用來將並行操作限制在特定節點上。因而,對於更大的 RAC 體系結構(超過兩臺伺服器),可以將特定的伺服器分配給指定的組以限制或啟用操作。
使用模式
對於通過 RAC 進行的並行執行,存在許多使用模式。它們是:
- 大資料集的並行查詢的標準用法。在這種情況下,可以定義並行度來利用整個叢集的所有可用資源。
- 使用受限的並行查詢。這種情況將處理限制在叢集中的特定節點上。因而可以對節點進行邏輯分組,以使用特定的操作型別。
- 並行索引構建/重建。在需要大規模索引構建的情況下,可以利用並行化來使叢集節點資源的利用率最大化。與查詢的情況類似,通過對伺服器邏輯分組,可以限制這些操作。
INIT.ORA 引數
存在一些與引數控制相關的標準引數,這些引數配置伺服器級的並行程式。RAC 環境的唯一變化是叢集中的每一個伺服器支援這些程式中的單獨的一組。不過,可以在所有例程上全域性設定這些引數也可以在特定的例程級上設定這些引數。
在表 1 列出了兩個常見的並行引數。
引數名 | 型別 | 說明 |
parallel_max_servers | 整型 | 每個節點的最大並行程式數 |
parallel_min_servers | 整型 | 每個節點的最大伺服器程式數 |
表 1:常見的並行 INIT.ORA 引數
表 2 中列出了一個 RAC 特有的引數。
引數名 | 型別 | 說明 |
instance_groups | 字串 | 定義邏輯組,以實現對特定伺服器的處理 |
表 2:RAC 特有的並行 INIT.ORA 引數
RAC 體系結構示例
對於本文中列出的示例,我們將利用一個執行在 Red Hat Advanced Server 2.1 下的一個兩節點的 RAC 體系結構。圖 1 包含了測試環境的一個示意圖。
<!-- Generated by Simple Tags 1.2.4 - http://wordpress.org/extend/plugins/simple-tags -->
用於檢視並行統計資料的 V$ 表
存在許多用於檢視並行操作統計資料的表。最有用的兩個表在表 3 中列出。以下的表名稱以 GV$ 識別符號為字首。對於 RAC 實施,存在一組額外的全域性檢視,這些檢視包含了一個額外的列,用於例程識別符號。除了這一列之外,其餘的列與相同名稱的 V$ 結構相同。
檢視名稱 | 說明 |
GV$PQ_SYSSTAT | 全部 RAC 配置的所有與並行相關的統計資料 |
GV$PQ_SESSTAT | 按會話 ID 提供的會話特有的並行統計資料 |
表 3:與並行操作 V$ 相關的表
並行設定和基準
測試的基本 INIT.ORA 引數定義如下。注意 "*" 號定義引數為跨所有 RAC 例程的全域性引數。
*.parallel_max_servers=5 *.parallel_min_servers=2
以下列表顯示 SALES1 和 SALES2 例程都在資料庫啟動時啟動了兩個並行的後臺程式。
UID PID PPID C STIME TTY TIME CMD oracle 28216 1 0 11:07 ?00:00:00 ora_p000_SALES1 oracle 28218 1 0 11:07 ?00:00:00 ora_p001_SALES1 oracle 620 1 0 11:09 ?00:00:00 ora_p000_SALES2 oracle 622 1 0 11:09 ?00:00:00 ora_p001_SALES2
GV$PQ_SYSTAT 表的一個查詢顯示 Oracle 核心中的並行程式的基本狀態。
select inst_id,statistic,value from gv$pq_sysstat where value > 0 order by 1, 2; INST_ID STATISTIC VALUE -------- -------------------------------- --------- 1 Servers Busy 1 Servers Idle 1 Servers Highwater 1 Server Sessions 1 2 Servers Busy 1 Servers Idle 1 Servers Highwater 1 Server Sessions 1
並行查詢測試示例
在這一部分中,我們將檢視本文之前提到的通過兩個節點的 RAC 體系結構來使用並行查詢的方法。需要執行兩種型別的測試:
- 一種不受限制的測試,其中查詢將在兩個 RAC 節點上執行
- 一種受限制的測試,其中查詢將限制在單個 RAC 節點上。
測試案例 1:不受限制的測試。在不受限制的測試中,通過並行提示,利用標準 SQL 來執行簡單的查詢。和任何查詢一樣,要利用並行操作,語句中必須包含全表掃描。
select /*+ full(c_stock) parallel(c_stock,6) */ sum(s_quantity) odcnt from c_stock /
根據並行提示(請求六個並行工作執行緒),在每個伺服器節點上啟動了三個程式。
UID PID PPID C STIME TTY TIME CMD oracle 13878 1 0 14:17 ?00:00:03 ora_p000_SALES1 oracle 13880 1 0 14:17 ?00:00:03 ora_p001_SALES1 oracle 13940 1 1 14:23 ?00:00:02 ora_p002_SALES1 oracle 18601 1 0 14:20 ?00:00:01 ora_p000_SALES2 oracle 18603 1 0 14:20 ?00:00:01 ora_p001_SALES2 oracle 18652 1 3 14:28 ?00:00:01 ora_p002_SALES2
來自 GV$PQ_SYSTAT 的統計資料顯示了在一個額外的伺服器上啟動的每一個例程。
INST_ID STATISTIC VALUE ---------- ------------------------------ ---------- 1 DFO Trees 5 Distr Msgs Recv'd 49 Distr Msgs Sent 49 Local Msgs Recv'd 110 Local Msgs Sent 101 Queries Initiated 5 Server Sessions 9 Servers Busy 1 Servers Highwater 3 Servers Idle 1 Servers Shutdown 1 Servers Started 1 Sessions Active 1 2 Distr Msgs Recv'd 12 Distr Msgs Sent 6 Server Sessions 6 Servers Busy 1 Servers Highwater 3 Servers Idle 1 Servers Shutdown 1 Servers Started 1
測試案例 2:受限制的測試。為了將並行處理限制在特定的叢集節點上,應用了例程組來建立邏輯伺服器組。控制是通過 INIT.ORA 的引數 INSTANCE_GROUPS 進行的。INSTANCE_GROUPS 是一個與 RAC 相關的引數,並只在並行模式中指定。與執行期引數 PARALLEL_INSTANCE_GROUP 結合使用,它允許將並行查詢操作限制在有限數量的例程上。
對於本部分中的測試,將利用下面指定的 INSTANCE_GROUPS。
# Init.ora Parameter Setting for Parallel Options SALES1.INSTANCE_GROUPS='marketing' SALES2.INSTANCE_GROUPS='finance'
在查詢執行之前修改以下會話,以分配給 FINANCE 組。即使查詢是在 SALES1 節點上啟動,根據 INSTANCE_GROUP 設定,所有的處理將在 SALES2 上執行。
alter session set parallel_instance_group = 'finance'; select /*+ full(c_stock) parallel(c_stock,6) */ sum(s_quantity) odcnt from c_stock /
注意在程式列表中,所有請求的並行工作執行緒實際上都只在 SALES2 節點上執行,因為 SALES1 上的程式沒有使用 CPU 時間。
UID PID PPID C STIME TTY TIME CMD oracle 29994 1 0 14:13 ?00:00:00 ora_p000_SALES1 oracle 29996 1 0 14:13 ?00:00:00 ora_p001_SALES1 oracle 2631 1 0 14:51 ?00:00:01 ora_p000_SALES2 oracle 2633 1 0 14:51 ?00:00:01 ora_p001_SALES2 oracle 2676 1 4 14:57 ?00:00:01 ora_p002_SALES2 oracle 2678 1 3 14:57 ?00:00:01 ora_p003_SALES2 oracle 2680 1 4 14:57 ?00:00:01 ora_p004_SALES2
GV$PQ_SYSTAT 表的一個查詢還顯示在第二個 SALES2 例程上啟動了額外的三個伺服器。為什麼只是三個伺服器而不是四個?記住 INIT.ORA 引數 parallel_max_servers 的設定。該引數的值是 5,因而只往原來的 2 個伺服器中增加了額外的 3 個伺服器。
INST_ID STATISTIC VALUE ---------- ------------------------------ ---------- 1 DFO Trees 3 Distr Msgs Recv'd 74 Distr Msgs Sent 74 Local Msgs Recv'd 2 Local Msgs Sent 1 Queries Initiated 3 Server Sessions 1 Servers Busy 1 Servers Highwater 1 Servers Idle 1 Sessions Active 2 2 Distr Msgs Recv'd 22 Distr Msgs Sent 11 Server Sessions 11 Servers Busy 6 Servers Highwater 6 Servers Started 3
在上面的例子中,利用 FINANCE 例程組,查詢被限制在 SALES2 節點上。下面的 INIT.ORA 示例允許 FINANCE 例程組立即在 SALES1 和 SALES2 節點上執行。注意必須為各個組顯式地輸入 INIT.ORA 引數 INSTANCE_GROUPS。
# Init.ora Parameter Setting for Parallel Options SALES1.instance_groups='marketing' SALES1.instance_groups='finance' SALES2.instance_groups='finance'
Create Table As 特性
為表物件建立拷貝時,Oracle 中的 Create Table As (CTAS) 特性極其有用。對於大型表,可以用和前面的並行查詢示例中所用的相同方式並行地執行操作。下面的 SQL 語句是利用並行選項使用 CTAS 的一個例子。也可以使用例程組來將處理限制在特定的節點上。因此,根據 INSTANCE_GROUPS 引數,查詢的執行將只在 SALES1 節點上執行。
alter session set parallel_instance_group = 'marketing'; create table c_district_backup parallel (degree 3) as select * from c_district /
索引構建
為大型表執行索引建立或重建是又一種資源密集型的操作,在其中使用並行操作可以大大提高效能。index create 語句要求操作的並行度為 6。與之前的例子類似,這個操作還可以利用 INSTANCE_GROUPS 引數來將操作限制在特定的節點上。
alter session set parallel_instance_group = 'marketing'; create unique index C_STOCK_I1 on C_STOCK (s_i_id, s_w_id) tablespace stock_indx parallel (degree 6) /
要考慮的效能因素
並行操作的缺點是極度消耗伺服器資源。最容易監控的伺服器資源是 CPU 使用率。如果正常的 CPU 使用率相當高,那麼不推薦部署大量的並行程式。超過 CPU 的總數也將導致效能下降。
資料佈局是另一個需考慮的直接因素。如果目前存在 I/O 瓶頸,那麼使用並行操作可能加劇這種狀況。請確保並行目標物件的資料檔案分佈在適當數量的磁碟主軸上。
結論
在 RAC 環境中使用並行操作提供了利用屬於叢集體系結構的所有伺服器硬體的靈活性。利用例程組,資料庫管理員能夠根據應用需求或服務水平協議進一步控制這些資源的分配。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/195110/viewspace-709781/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 超大記憶體環境下的Oracle RAC引數設定建議記憶體Oracle
- Oracle RAC Cache Fusion 系列九:Oracle RAC 分散式資源管理(二)Oracle分散式
- Oracle RAC Cache Fusion 系列八:Oracle RAC 分散式資源管理(一)Oracle分散式
- Oracle RAC 環境下的連線管理Oracle
- Oracle 11.2.0.4 rac for aix acfs異常環境的克隆環境ASM磁碟組掛載緩慢OracleAIASM
- 【轉載】MapReduce程式設計 Intellij Idea配置MapReduce程式設計環境程式設計IntelliJIdea
- Oracle RAC環境下ASM磁碟組擴容OracleASM
- 環境變數的設定方法(轉)~變數
- hadoop完全分散式環境搭建Hadoop分散式
- Hbase偽分散式環境搭建分散式
- Hadoop環境搭建(二)分散式Hadoop分散式
- Oracle RAC一鍵部署001(主機環境校驗)Oracle
- ORACLE 12C RAC 生產環境搭建介紹Oracle
- oracle 11G RAC的建立(VM虛擬環境)Oracle
- 通過ORACLE VM virtualbox環境安裝oracle 11G RAC(ASM)OracleASM
- Word設定樣式快捷鍵(轉載)
- Oracle RAC 環境 引數檔案的啟動順序Oracle
- Oracle RAC環境新增新的network和listener(未完成)Oracle
- Servlet 的環境設定Servlet
- 如何設定FreeSWITCH環境
- R環境的設定
- [分散式]分散式計算系統淺析分散式
- JAVA下載安裝及設定環境變數Java變數
- 分散式系統與叢集環境分散式
- JEESZ分散式框架開發環境部署分散式框架開發環境
- 分散式計算技術(下):Impala、Apache Flink、星環Slipstream分散式Apache
- Oracle 12cR1 RAC叢集安裝(一)--環境準備Oracle
- 分散式雲端計算分散式
- ubuntu環境下掛載新硬碟(轉載)Ubuntu硬碟
- 自動設定autotrace環境
- ansible設定環境變數變數
- ansible 設定環境變數變數
- export 設定環境變數Export變數
- Linux設定環境變數Linux變數
- 4.2.10.2 設定和取消設定環境變數變數
- RAC環境修改spfile的位置
- [原始碼解析] TensorFlow 分散式環境(5) --- Session原始碼分散式Session
- [原始碼解析] TensorFlow 分散式環境(4) --- WorkerCache原始碼分散式
- [Hadoop踩坑]叢集分散式環境配置Hadoop分散式