以下是 PARALLEL
Hint 的语法:
注意
如果还进行了排序或分组操作,那么可以使用的线程数量是 PARALLEL
Hint 中的值的两倍。
PARALLE
Hint 中参数 integer 的值用来指定并行度。
以下示例中,指定数据库的并行度为 5:
SELECT /*+ PARALLEL(5) */ last_name
FROM employees;
USE_PX
Hint 强制指示服务器在执行 SQL 语句时使用 PX 模式,PX 模式允许在执行语句时采用多线程方式。一般 USE_PX
Hint 和 PARALLEL
Hint 配合使用。
以下是 Hint 的语法:
示例如下:
NO_USE_PX
Hint 强制指示服务器在执行 SQL 语句时避免使用 PX 模式。
以下是 NO_USE_PX
Hint 的语法:
/*+ 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 指示优化器怎样在程序(查询)服务器和消耗(负载)查询服务器之间分配行。您可以通过该 Hint 控制联接或负载的行分布PQ_DISTRIBUTE
Hint 的语法:
您可以控制并行语句 INSERT ... SELECT
和并行语句 CREATE TABLE ... AS SELECT
的行分布,以此来确定如何在程序(查询)服务器和消耗(负载)服务器之间进行行分配。使用语法的上分支来指定分发方法。分布方法的值及其语义如下表所示:
例如,在以下直接装入插入操作中,该操作的查询和负载部分被组合到每个查询服务器中:
INTO target_table
在下面的示例中,创建表时优化器使用表 target_table 的分区来分配行:
CREATE /*+ PQ_DISTRIBUTE(target_table, PARTITION) */ TABLE target_table
NOLOGGING PARALLEL 16
PARTITION BY HASH (l_orderkey) PARTITIONS 512
AS SELECT * FROM source_table;
控制联接的分配
您可以通过指定两种分配方法来控制联接的分配方法,如语法中的下部分支所示,一种外部表的分布方法,一种内部表的分布方法:
outside_distribution
是外部表的分布方法。inner_distribution
是内部表的分布方法。
分布方法的值是 HASH
、BROADCAST
、PARTITION
和 NONE
。只有下表中的 6 种分布方法组合是有效的:
分布方法 | 说明 |
---|---|
使用联接键上的哈希函数,将每个表的行映射到消耗查询服务器。映射完成后,每个查询服务器都会在一对结果分区之间执行联接。当表的大小可比较并且联接操作是通过哈希联接或排序合并联接实现时,建议使用此分布方法。 | |
BROADCAST, NONE | 外部表的所有行都广播到每个程序查询服务器。内部表行是随机分区的。当外部表与内部表相比非常小时,建议使用此分布方法。通常,当内部表大小乘以查询服务器的数量大于外部表大小时,也建议使用此分布方法。 |
NONE, BROADCAST | 内部表的所有行都广播给每个消耗查询服务器。外部表行是随机分区的。当内部表与外部表相比非常小时,建议使用此分布方法。通常,当内部表大小乘以查询服务器的数量小于外部表大小时,也建议使用此分布方法。 |
PARTITION, NONE | 外部表的行使用以内部表的分区进行映射。内部表必须在联接键上进行分区。当外部表的分区数等于或几乎等于查询服务器数的倍数时,建议使用此分布方法。例如,有 14 个分区和 15 个查询服务器。 注意 如果内部表未分区或未在分区键上等分联接时,则优化器将忽略此 Hint。 |
NONE, PARTITION | 内部表的行使用外部表的分区进行映射。外部表必须在联接键上进行分区。当外部表的分区数等于或几乎等于查询服务器数的倍数时,建议使用此分布方法。例如,有 14 个分区和 15 个查询服务器。 注意 如果外部表未在分区键上进行分区或未等分联时接,则优化器将忽略此 Hint |
NONE, NONE | 每个查询服务器在一对匹配的分区之间执行联接操作,每个表中都有一个。两个表必须在连接键上等分。 |
要广播外部表 r,查询语句为:
SELECT /*+ORDERED PQ_DISTRIBUTE(s BROADCAST, NONE) USE_HASH (s) */ column_list
WHERE r.c=s.c;