租户设置的并行度参数仅对查询语句生效,DML 语句无法并行执行。
A.正确
B.错误
2 个赞
B. 错误
这个说法是错误的。OceanBase 数据库的并行执行框架同样支持并行 DML(PDML),可以显著加速大批量数据的插入、更新和删除操作。
为什么是错误的?
题目的说法有两个主要的误点:
-
并行度参数对 DML 是生效的:用于控制并行度的系统变量,如
parallel_degree_policy(并行度选择策略)、parallel_degree_limit(并行度上限)等,其生效范围可以是 Global(全局)或 Session(会话)级别。这意味着它们会影响当前会话或整个租户下满足条件的查询和 DML 语句。 - DML 语句明确支持并行执行:OceanBase 数据库支持通过多种方式为 DML 语句开启并行执行,这被称为 PDML。
如何为 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;
-
MySQL 模式:
-
在表上设置默认并行度:创建或修改表时指定并行度,对其执行 DML 时会自动使用。
CREATE TABLE table_name (...) PARALLEL 8; ALTER TABLE table_name PARALLEL 6; -
启用自动并行度(Auto DOP):设置策略为
AUTO,让数据库根据系统资源和负载自动决定是否并行及并行度。SET GLOBAL parallel_degree_policy = AUTO;
需要注意的限制
虽然 DML 支持并行,但在某些特定场景下会受到限制,无法使用 PDML。例如:
- 目标表包含本地唯一索引时。
- 使用了
INSERT ON DUPLICATE KEY UPDATE语句。 - 目标表包含触发器或外键。
- 使用了
IGNORE关键字(如INSERT IGNORE)。 - 涉及跨库操作或嵌套 SQL。
因此,租户设置的并行度参数对 DML 语句是有效的,题干的描述是错误的。
2 个赞