您好,登錄后才能下訂單哦!
| 0 | SELECT STATEMENT | | 107 | 2782 | 3 (34)| 00:00:01 | | | |
| 1 | PX COORDINATOR | | | | | | | | |
| 2 | PX SEND QC (RANDOM) | :TQ10001 | 107 | 2782 | 3 (34)| 00:00:01 | Q1,01 | P->S | QC (RAND) |
| 3 | HASH GROUP BY | | 107 | 2782 | 3 (34)| 00:00:01 | Q1,01 | PCWP | |
| 4 | PX RECEIVE | | 107 | 2782 | 3 (34)| 00:00:01 | Q1,01 | PCWP | |
| 5 | PX SEND HASH | :TQ10000 | 107 | 2782 | 3 (34)| 00:00:01 | Q1,00 | P->P | HASH |
| 6 | HASH GROUP BY | | 107 | 2782 | 3 (34)| 00:00:01 | Q1,00 | PCWP | |
| 7 | PX BLOCK ITERATOR | | 107 | 2782 | 2 (0)| 00:00:01 | Q1,00 | PCWC | |
| 8 | TABLE ACCESS FULL| TEST | 107 | 2782 | 2 (0)| 00:00:01 | Q1,00 | PCWP
執(zhí)行步驟:
1、并行服務進程TEST表進行全表掃描。
2、并行服務進程以ITERATOR(迭代)方式訪問數(shù)據(jù)塊,也就是并行協(xié)調(diào)進程分給每個并行服務進程一個數(shù)據(jù)片,在這個數(shù)據(jù)片上,并行服務進程順序地訪問每個數(shù)據(jù)塊(Iterator),所有的并行服務進程將掃描的數(shù)據(jù)塊傳給另一組并行服務進程(父進程)用于做Hash Group操作。
3、并行服務父進程對子進程傳遞過來的數(shù)據(jù)做Hash Group操作。
4、并行服務進程(子進程)將處理完的數(shù)據(jù)發(fā)送出去。
5、并行服務進程(父進程)接收到處理過的數(shù)據(jù)。
6、合并處理過的數(shù)據(jù),按照隨機的順序發(fā)給并行協(xié)調(diào)進程(QC:Query Conordinator)。
7、并行協(xié)調(diào)進程將處理結果發(fā)給用戶。
并行機制:|@|首先Oracle會創(chuàng)建一個進程用于協(xié)調(diào)并行服務進程之間的信息傳遞,這個協(xié)調(diào)進程將需要操作的數(shù)據(jù)集(比如表的數(shù)據(jù)塊)分割成很多部分,稱為并行處理單元,然后并行協(xié)調(diào)進程給每個并行進程分配一個數(shù)據(jù)單元。|@||@|比如有四個并行服務進程,他們就會同時處理各自分配的單元,當一個并行服務進程處理完畢后,協(xié)調(diào)進程就會給它們分配另外的單元,如此反復,直到表上的數(shù)據(jù)都處理完畢,最后協(xié)調(diào)進程負責將每個小的集合合并為一個大集合作為最終的執(zhí)行結果,返回給用戶。|@||@|并行處理的機制實際上就是把一個要掃描的數(shù)據(jù)集分成很多小數(shù)據(jù)集,Oracle會啟動幾個并行服務進程同時處理這些小數(shù)據(jù)集,最后將這些結果匯總,作為最終的處理結果返回給用戶。 |@||@|這種數(shù)據(jù)并行處理方式在OLAP系統(tǒng)中非常有用,OLAP系統(tǒng)的表通常來說都是非常大,如果系統(tǒng)的CPU比較多,讓所有的CPU共同來處理這些數(shù)據(jù),效果就會比串行執(zhí)行要高得多。 |@||@|然而對于OLTP系統(tǒng),通常來講,并行并不合適,原因是OLTP系統(tǒng)上幾乎在所有的SQL操作中,數(shù)據(jù)訪問路徑基本上以索引訪問為主,并且返回結果集非常小,這樣的SQL操作的處理速度一般非???,不需要啟用并行。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。