RAC中的跨節點並行[轉]

zhouxianwang發表於2012-08-14

在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=……一下,然後只限制這些程式跨節點並行。

source:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27036311/viewspace-740985/,如需轉載,請註明出處,否則將追究法律責任。

相關文章