【问题标题】:What is the Difference in using FORCE, ENABLE, DISABLE keyword in PARALLEL QUERY/DML/DDL在 PARALLEL QUERY/DML/DDL 中使用 FORCE、ENABLE、DISABLE 关键字有什么区别
【发布时间】:2015-03-04 03:37:36
【问题描述】:

以下语句有什么区别

ALTER SESSION FORCE   PARALLEL QUERY;
ALTER SESSION ENABLE  PARALLEL DDL;
ALTER SESSION DISABLE PARALLEL DML;

从优化的角度来看,哪个更建议。最初,我使用的是 DISABLE,后来我使用 ENABLE 进行了测试,它表现更好,现在 FORCE 做得更好。无论如何,FORCE 有没有可能适得其反。

【问题讨论】:

    标签: oracle oracle11g parallel-processing query-optimization


    【解决方案1】:

    请参考http://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_2013.htm

    并行 DML | DDL |查询

    PARALLEL 参数确定会话中的所有后续 DML、DDL 或查询语句是否将被考虑并行执行。此子句使您能够在当前会话期间覆盖表的并行度,而无需更改表本身。在为 DML 执行此子句之前,必须提交或回滚未提交的事务。

    启用子句

    指定 ENABLE 以并行执行会话中的后续语句。这是 DDL 和查询语句的默认设置。 • DML:如果指定了并行提示或并行子句,则以并行模式执行 DML 语句。

    • DDL:如果指定了并行子句,则以并行方式执行 DDL 语句。

    • QUERY:如果指定了并行提示或并行子句,则以并行模式执行查询。

    对 ENABLE 子句的限制 您不能使用 ENABLE 指定可选的 PARALLEL 整数。

    禁用子句

    指定禁用以串行执行会话中的后续语句。这是 DML 语句的默认设置。 • DML:DML 语句是串行执行的。

    • DDL:DDL 语句是串行执行的。

    • QUERY:查询是串行执行的。

    对 DISABLE 子句的限制 您不能使用 DISABLE 指定可选的 PARALLEL 整数。

    FORCE 子句

    FORCE 强制在会话中并行执行后续语句。如果未指定并行子句或提示,则使用默认并行度。此子句覆盖会话中后续语句中指定的任何 parallel_clause,但被并行提示覆盖。 • DML:如果没有违反并行 DML 限制,则会话中的后续 DML 语句将以默认并行度执行,除非在此子句中指定了并行度。

    • DDL:会话中的后续 DDL 语句以默认并行度执行,除非在此子句中指定了并行度。生成的数据库对象将与主要的并行度相关联。

    指定 FORCE DDL 会自动导致在此会话中创建的所有表都以默认并行度级别创建。效果与您在 CREATE TABLE 语句中指定了 parallel_clause(具有默认度数)一样。

    • QUERY:后续查询以默认并行度执行,除非在此子句中指定了并行度。

    PARALLEL integer 指定一个整数来明确指定并行度: • 对于 FORCE DDL,度数会覆盖后续 DDL 语句中的任何并行子句。

    • 对于 FORCE DML 和 QUERY,度数会覆盖当前为数据字典中的表存储的度数。

    • 通过提示在语句中指定的度数将覆盖强制的度数。

    以下类型的 DML 操作不会与此子句无关: • 对聚表的操作

    • 具有写入或读取数据库或包状态的嵌入式函数的操作

    • 对带有可能触发的触发器的表进行操作

    • 对包含对象类型或 LONG 或 LOB 数据类型的表或模式对象的操作

    【讨论】:

      猜你喜欢
      • 2011-02-04
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      相关资源
      最近更新 更多