在 PARALLEL QUERY/DML/DDL 中使用 FORCE、ENABLE、DISABLE 关键字有什么区别
What is the Difference in using FORCE, ENABLE, DISABLE keyword in PARALLEL QUERY/DML/DDL
以下语句有什么区别
ALTER SESSION FORCE PARALLEL QUERY;
ALTER SESSION ENABLE PARALLEL DDL;
ALTER SESSION DISABLE PARALLEL DML;
从优化的角度来说,更推荐哪一个。最初,我使用的是 DISABLE,后来我用 ENABLE 进行了测试,它的性能更好,现在 FORCE 的性能更好。在任何情况下,FORCE 是否有可能适得其反。
请参考http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2013.htm
并行 DML |动态描述语言 |查询
PARALLEL 参数确定会话中所有后续的 DML、DDL 或查询语句是否将被考虑并行执行。此子句使您能够在当前会话期间覆盖 tables 的并行度,而无需更改 tables 本身。在为 DML 执行此子句之前,必须提交或回滚未提交的事务。
启用子句
指定启用以并行执行会话中的后续语句。这是 DDL 和查询语句的默认值。
•
DML:如果指定了并行提示或并行子句,则 DML 语句以并行模式执行。
•
DDL:如果指定了并行子句,则DDL语句以并行模式执行。
•
QUERY:如果指定了并行提示或并行子句,查询将以并行模式执行。
ENABLE 子句的限制不能用 ENABLE 指定可选的 PARALLEL 整数。
禁用子句
指定 DISABLE 以串行执行会话中的后续语句。这是 DML 语句的默认值。
•
DML:DML语句串行执行。
•
DDL:DDL语句串行执行。
•
QUERY:查询是串行执行的。
DISABLE 子句的限制您不能使用 DISABLE 指定可选的 PARALLEL 整数。
FORCE 条款
FORCE 强制并行执行会话中的后续语句。如果未指定并行子句或提示,则使用默认的并行度。此子句覆盖会话中后续语句中指定的任何 parallel_clause,但被并行提示覆盖。
•
DML:如果不违反并行 DML 限制,会话中的后续 DML 语句将以默认并行度执行,除非在此子句中指定了并行度。
•
DDL:会话中的后续 DDL 语句以默认并行度执行,除非在该子句中指定了并行度。生成的数据库对象将具有与其相关联的普遍并行度。
指定 FORCE DDL 会自动导致在此会话中创建的所有 tables 以默认的并行级别创建。效果与在 CREATE TABLE 语句中指定 parallel_clause(具有默认度数)相同。
•
QUERY:后续查询将以默认并行度执行,除非在此子句中指定了并行度。
PARALLEL integer 指定一个整数以明确指定并行度:
•
对于 FORCE DDL,度数覆盖后续 DDL 语句中的任何并行子句。
•
对于 FORCE DML 和 QUERY,度数覆盖当前存储在数据字典中的 table 的度数。
•
通过提示在语句中指定的度数将覆盖强制的度数。
无论此子句如何,以下类型的 DML 操作都不会并行化:
•
集群 tables
上的操作
•
具有写入或读取数据库或包状态的嵌入式函数的操作
•
对 tables 的操作可能会触发
•
对 table 或包含对象类型或 LONG 或 LOB 数据类型的模式对象的操作
以下语句有什么区别
ALTER SESSION FORCE PARALLEL QUERY;
ALTER SESSION ENABLE PARALLEL DDL;
ALTER SESSION DISABLE PARALLEL DML;
从优化的角度来说,更推荐哪一个。最初,我使用的是 DISABLE,后来我用 ENABLE 进行了测试,它的性能更好,现在 FORCE 的性能更好。在任何情况下,FORCE 是否有可能适得其反。
请参考http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2013.htm
并行 DML |动态描述语言 |查询
PARALLEL 参数确定会话中所有后续的 DML、DDL 或查询语句是否将被考虑并行执行。此子句使您能够在当前会话期间覆盖 tables 的并行度,而无需更改 tables 本身。在为 DML 执行此子句之前,必须提交或回滚未提交的事务。
启用子句
指定启用以并行执行会话中的后续语句。这是 DDL 和查询语句的默认值。 • DML:如果指定了并行提示或并行子句,则 DML 语句以并行模式执行。
• DDL:如果指定了并行子句,则DDL语句以并行模式执行。
• QUERY:如果指定了并行提示或并行子句,查询将以并行模式执行。
ENABLE 子句的限制不能用 ENABLE 指定可选的 PARALLEL 整数。
禁用子句
指定 DISABLE 以串行执行会话中的后续语句。这是 DML 语句的默认值。 • DML:DML语句串行执行。
• DDL:DDL语句串行执行。
• QUERY:查询是串行执行的。
DISABLE 子句的限制您不能使用 DISABLE 指定可选的 PARALLEL 整数。
FORCE 条款
FORCE 强制并行执行会话中的后续语句。如果未指定并行子句或提示,则使用默认的并行度。此子句覆盖会话中后续语句中指定的任何 parallel_clause,但被并行提示覆盖。 • DML:如果不违反并行 DML 限制,会话中的后续 DML 语句将以默认并行度执行,除非在此子句中指定了并行度。
• DDL:会话中的后续 DDL 语句以默认并行度执行,除非在该子句中指定了并行度。生成的数据库对象将具有与其相关联的普遍并行度。
指定 FORCE DDL 会自动导致在此会话中创建的所有 tables 以默认的并行级别创建。效果与在 CREATE TABLE 语句中指定 parallel_clause(具有默认度数)相同。
• QUERY:后续查询将以默认并行度执行,除非在此子句中指定了并行度。
PARALLEL integer 指定一个整数以明确指定并行度: • 对于 FORCE DDL,度数覆盖后续 DDL 语句中的任何并行子句。
• 对于 FORCE DML 和 QUERY,度数覆盖当前存储在数据字典中的 table 的度数。
• 通过提示在语句中指定的度数将覆盖强制的度数。
无论此子句如何,以下类型的 DML 操作都不会并行化: • 集群 tables
上的操作• 具有写入或读取数据库或包状态的嵌入式函数的操作
• 对 tables 的操作可能会触发
• 对 table 或包含对象类型或 LONG 或 LOB 数据类型的模式对象的操作