W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
?PARALLEL
? Hint 是語(yǔ)句級(jí)的 Hint,用來(lái)指示優(yōu)化器指定并行操作可使用的并行線程的數(shù)量。此 Hint 將覆蓋初始化參數(shù) ?PARALLEL_DEGREE_ POLICY
? 的值。該 Hint 適用于語(yǔ)句的 ?SELECT
?、?INSERT
?、?MERGE
?、?UPDATE
? 和 ?DELETE
? 部分,以及表掃描的部分。如果違反了任何的并行限制,則 ?PARALLEL
? Hint
被忽略。
以下是 ?PARALLEL
? Hint 的語(yǔ)法:
/*+ PARALLEL(integer) */
注意
如果還進(jìn)行了排序或分組操作,那么可以使用的線程數(shù)量是 ?PARALLEL
? Hint 中的值的兩倍。
?PARALLE
?Hint 中參數(shù) integer 的值用來(lái)指定并行度。
以下示例中,指定數(shù)據(jù)庫(kù)的并行度為 5:
SELECT /*+ PARALLEL(5) */ last_name
FROM employees;
?USE_PX
? Hint 強(qiáng)制指示服務(wù)器在執(zhí)行 SQL 語(yǔ)句時(shí)使用 PX 模式,PX 模式允許在執(zhí)行語(yǔ)句時(shí)采用多線程方式。一般 ?USE_PX
? Hint 和 ?PARALLEL
? Hint 配合使用。
以下是 ?USE_PX
? Hint 的語(yǔ)法:
/*+ USE_PX */
示例如下:
SELECT /*+ USE_PX PARALLEL(4)*/ e.department_id, sum(e.salary)
FROM employees e
WHERE e.department_id = 1001;
GROUP BY e.department_id;
?NO_USE_PX
? Hint 強(qiáng)制指示服務(wù)器在執(zhí)行 SQL 語(yǔ)句時(shí)避免使用 PX 模式。
以下是 ?NO_USE_PX
? Hint 的語(yǔ)法:
/*+ NO_USE_PX */
示例如下:
SELECT /*+ NO_USE_PX*/ e.department_id, sum(e.salary)
FROM employees e
WHERE e.department_id = 1001;
GROUP BY e.department_id;
?PQ_DISTRIBUTE
? Hint 指示優(yōu)化器怎樣在程序(查詢)服務(wù)器和消耗(負(fù)載)查詢服務(wù)器之間分配行。您可以通過(guò)該 Hint 控制聯(lián)接或負(fù)載的行分布?PQ_DISTRIBUTE
? Hint 的語(yǔ)法:
/*+ PQ_DISTRIBUTE
( [ @ queryblock ] tablespec
{ distribution | outer_distribution inner_distribution }
) */
您可以控制并行語(yǔ)句 ?INSERT ... SELECT
? 和并行語(yǔ)句 ?CREATE TABLE ... AS SELECT
? 的行分布,以此來(lái)確定如何在程序(查詢)服務(wù)器和消耗(負(fù)載)服務(wù)器之間進(jìn)行行分配。使用語(yǔ)法的上分支來(lái)指定分發(fā)方法。分布方法的值及其語(yǔ)義如下表所示:
分布方法 |
說(shuō)明 |
---|---|
NONE |
沒(méi)有分配。即將查詢和負(fù)載操作組合到每個(gè)查詢服務(wù)器中。所有服務(wù)器將加載所有分區(qū)。這種分配方法的缺失有助于避免在沒(méi)有偏離的情況下行分配的開(kāi)銷。由于空段或語(yǔ)句中的謂詞會(huì)過(guò)濾掉查詢?cè)u(píng)估的所有行,因此可能會(huì)發(fā)生偏離。如果由于使用此方法而發(fā)生偏斜,則請(qǐng)改用
|
PARTITION |
此方法使用 |
RANDOM |
此方法以循環(huán)方式將來(lái)自程序的行分發(fā)給消耗。當(dāng)輸入數(shù)據(jù)高度傾斜時(shí),使用這種分布方法。 |
RANDOM_LOCAL |
此方法將來(lái)自程序的行分布到一組服務(wù)器,這些服務(wù)器負(fù)責(zé)維護(hù)給定的一組服務(wù)器。兩個(gè)或多個(gè)服務(wù)器可以加載同一分區(qū),但是沒(méi)有服務(wù)器加載所有分區(qū)。當(dāng)輸入數(shù)據(jù)發(fā)生偏移并且由于內(nèi)存限制而無(wú)法合并查詢和加載操作時(shí),請(qǐng)使用此分布方法。 |
例如,在以下直接裝入插入操作中,該操作的查詢和負(fù)載部分被組合到每個(gè)查詢服務(wù)器中:
INSERT /*+ APPEND PARALLEL(target_table, 16) PQ_DISTRIBUTE(target_table, NONE) */
INTO target_table
SELECT * FROM source_table;
在下面的示例中,創(chuàng)建表時(shí)優(yōu)化器使用表 target_table 的分區(qū)來(lái)分配行:
CREATE /*+ PQ_DISTRIBUTE(target_table, PARTITION) */ TABLE target_table
NOLOGGING PARALLEL 16
PARTITION BY HASH (l_orderkey) PARTITIONS 512
AS SELECT * FROM source_table;
您可以通過(guò)指定兩種分配方法來(lái)控制聯(lián)接的分配方法,如語(yǔ)法中的下部分支所示,一種外部表的分布方法,一種內(nèi)部表的分布方法:
outside_distribution
? 是外部表的分布方法。inner_distribution
? 是內(nèi)部表的分布方法。分布方法的值是 ?HASH
?、?BROADCAST
?、?PARTITION
? 和 ?NONE
?。只有下表中的 6 種分布方法組合是有效的:
分布方法 |
說(shuō)明 |
---|---|
HASH, HASH |
使用聯(lián)接鍵上的哈希函數(shù),將每個(gè)表的行映射到消耗查詢服務(wù)器。映射完成后,每個(gè)查詢服務(wù)器都會(huì)在一對(duì)結(jié)果分區(qū)之間執(zhí)行聯(lián)接。當(dāng)表的大小可比較并且聯(lián)接操作是通過(guò)哈希聯(lián)接或排序合并聯(lián)接實(shí)現(xiàn)時(shí),建議使用此分布方法。 |
BROADCAST, NONE |
外部表的所有行都廣播到每個(gè)程序查詢服務(wù)器。內(nèi)部表行是隨機(jī)分區(qū)的。當(dāng)外部表與內(nèi)部表相比非常小時(shí),建議使用此分布方法。通常,當(dāng)內(nèi)部表大小乘以查詢服務(wù)器的數(shù)量大于外部表大小時(shí),也建議使用此分布方法。 |
NONE, BROADCAST |
內(nèi)部表的所有行都廣播給每個(gè)消耗查詢服務(wù)器。外部表行是隨機(jī)分區(qū)的。當(dāng)內(nèi)部表與外部表相比非常小時(shí),建議使用此分布方法。通常,當(dāng)內(nèi)部表大小乘以查詢服務(wù)器的數(shù)量小于外部表大小時(shí),也建議使用此分布方法。 |
PARTITION, NONE |
外部表的行使用以內(nèi)部表的分區(qū)進(jìn)行映射。內(nèi)部表必須在聯(lián)接鍵上進(jìn)行分區(qū)。當(dāng)外部表的分區(qū)數(shù)等于或幾乎等于查詢服務(wù)器數(shù)的倍數(shù)時(shí),建議使用此分布方法。例如,有 14 個(gè)分區(qū)和 15 個(gè)查詢服務(wù)器。
|
NONE, PARTITION |
內(nèi)部表的行使用外部表的分區(qū)進(jìn)行映射。外部表必須在聯(lián)接鍵上進(jìn)行分區(qū)。當(dāng)外部表的分區(qū)數(shù)等于或幾乎等于查詢服務(wù)器數(shù)的倍數(shù)時(shí),建議使用此分布方法。例如,有 14 個(gè)分區(qū)和 15 個(gè)查詢服務(wù)器。
|
NONE, NONE |
每個(gè)查詢服務(wù)器在一對(duì)匹配的分區(qū)之間執(zhí)行聯(lián)接操作,每個(gè)表中都有一個(gè)。兩個(gè)表必須在連接鍵上等分。 |
例如,給定兩個(gè)使用哈希聯(lián)接來(lái)聯(lián)接表 r 和 s,以下查詢包含使用哈希分配的 Hint:
SELECT /*+ORDERED PQ_DISTRIBUTE(s HASH, HASH) USE_HASH (s)*/ column_list
FROM r,s
WHERE r.c=s.c;
要廣播外部表 r,查詢語(yǔ)句為:
SELECT /*+ORDERED PQ_DISTRIBUTE(s BROADCAST, NONE) USE_HASH (s) */ column_list
FROM r,s
WHERE r.c=s.c;
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: