【判断题】租户设置的并行度参数仅对查询语句生效,DML 语句无法并行执行。

租户设置的并行度参数仅对查询语句生效,DML 语句无法并行执行。
A.正确
B.错误

2 个赞

B. 错误

这个说法是错误的。OceanBase 数据库的并行执行框架同样支持并行 DML(PDML),可以显著加速大批量数据的插入、更新和删除操作。

:pushpin: 为什么是错误的?

题目的说法有两个主要的误点:

  1. 并行度参数对 DML 是生效的:用于控制并行度的系统变量,如 parallel_degree_policy(并行度选择策略)、parallel_degree_limit(并行度上限)等,其生效范围可以是 Global(全局)或 Session(会话)级别。这意味着它们会影响当前会话或整个租户下满足条件的查询和 DML 语句。
  2. DML 语句明确支持并行执行:OceanBase 数据库支持通过多种方式为 DML 语句开启并行执行,这被称为 PDML。

:gear: 如何为 DML 开启并行?

在实际操作中,可以通过以下几种方式开启并行 DML:

  • 使用 SQL Hint(最高优先级):在 SQL 语句中直接添加 hint,临时启用并行。
    INSERT /*+ ENABLE_PARALLEL_DML PARALLEL(4) */ INTO target_table SELECT * FROM source_table;
    UPDATE /*+ ENABLE_PARALLEL_DML PARALLEL(8) */ table_name SET column = value WHERE condition;
    DELETE /*+ ENABLE_PARALLEL_DML PARALLEL(6) */ FROM table_name WHERE condition;
    
  • 在会话(Session)级别设置:让当前会话中的所有 DML 操作都自动启用并行。
    • MySQL 模式SET _FORCE_PARALLEL_DML_DOP = 4;
    • Oracle 模式ALTER SESSION ENABLE PARALLEL DML;
  • 在表上设置默认并行度:创建或修改表时指定并行度,对其执行 DML 时会自动使用。
    CREATE TABLE table_name (...) PARALLEL 8;
    ALTER TABLE table_name PARALLEL 6;
    
  • 启用自动并行度(Auto DOP):设置策略为 AUTO,让数据库根据系统资源和负载自动决定是否并行及并行度。
    SET GLOBAL parallel_degree_policy = AUTO;
    

:no_entry_sign: 需要注意的限制

虽然 DML 支持并行,但在某些特定场景下会受到限制,无法使用 PDML。例如:

  • 目标表包含本地唯一索引时。
  • 使用了 INSERT ON DUPLICATE KEY UPDATE 语句。
  • 目标表包含触发器或外键
  • 使用了 IGNORE 关键字(如 INSERT IGNORE)。
  • 涉及跨库操作或嵌套 SQL。

因此,租户设置的并行度参数对 DML 语句是有效的,题干的描述是错误的。

2 个赞