暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PolarDB-X DDL 执行详解

PolarDB 2025-10-21
15

PolarDB-X DDL 执行详解

本文分享 PolarDB-X 中数据定义语言 (DDL) 语句的执行方式,涵盖 DDL 操作的执行流水线、校验机制、JOB创建和管理。

DDL执行架构

PolarDB-X 中的 DDL 执行遵循多阶段流程,包括验证、作业创建和异步执行。优先考虑可靠性、一致性以及与系统分布式特性的集成。

DDL 上下文

DdlContext
类充当所有与 DDL 相关的运行时数据和状态信息的容器。它在 DDL 执行开始时创建,并在整个生命周期内跟踪操作。

DdlContext
的主要属性:

  • Job 标识 (jobId
    , parentJobId
    , parentTaskId
    )
  • Operation metadata (ddlType
    , schemaName
    , objectName
    )
  • Execution state and flags (state
    , asyncMode
    , forRollback
    )
  • SQL statements (ddlStmt
    , cdcRewriteDdlStmt
    , foreignKeyOriginalSql
    )

DDL执行管道

DDL 执行管道将 DDL 语句转换为跨分布式数据节点的物理更改。该过程在即时一致性要求与可能长时间运行的操作之间取得平衡。

执行步骤

1、初始化 DDL 上下文:

  • 使用operation元数据创建DdlContext
  • 设置跟踪 ID、schema和对象名称
  • 捕获 SQL 模式和连接串变量
  • 如果需要,重写用于 CDC 的原始 SQL

2、计划验证:

  • 验证表引擎兼容性
  • 执行特定操作的验证
  • 验证约束和依赖关系

3、物理映射:

  • 确定数据库索引和物理表名称
  • 处理分区表与标准表的不同之处

4、创造JOB:

  • 根据操作类型构建专门的 DDL 作业
  • 为每个所需操作创建任务
  • 设置任务之间的依赖关系

5、任务校验:

  • 验证任务名称和依赖关系
  • 检查作业的完整性和正确性

6、执行:

  • 提交作业给DDL引擎执行
  • 作为常规或子作业执行

7、结果生成:

  • 根据操作构建合适的游标
  • 返回异步操作的作业 ID
  • 返回 EXPLAIN 操作的执行计划

验证机制

PolarDB-X 采用各种验证器来确保 DDL 操作保持数据完整性并遵守系统约束。

外键验证

外键验证是一种专门的验证过程,应用于涉及外键约束的 CREATE TABLE
 和 ALTER TABLE
 操作。

外键的键验证规则:

  • 对于具有外键的表,存储引擎必须是 InnoDB
  • 外键约束名称必须唯一
  • 引用的列必须存在于引用表中
  • 引用的列必须具有覆盖外键的索引
  • 引用列和被引用列之间的数据类型必须兼容
  • 字符集和排序规则必须匹配
  • 生成列不能用于外键
  • SET NULL 选项需要 nullable 的外键列

DDL 操作的 CDC 集成

DDL 操作被标记, 可被变更数据捕获 (CDC)模块使用,以确保DDL正确复制到下游系统。

为CDC集成的功能:

  • 重写 DDL 语句以给匿名索引分配名称
  • 保留原始 SQL 语句以进行 CDC 复制
  • 外键语句的特殊处理
  • 包含server变量和 SQL mode
  • 支持具有唯一 ID 的 DDL 版本控制

DDL 类型和处理程序

PolarDB-X 支持各种类型的 DDL 操作,每种操作都有自己的专用处理程序来扩展通用框架。

DDL Type
Description
Handler Class
CREATE TABLE
Creates a new table
LogicalCreateTableHandler
ALTER TABLE
Modifies an existing table
LogicalAlterTableHandler
DROP TABLE
Removes a table
LogicalDropTableHandler
CREATE INDEX
Creates an index
LogicalCreateIndexHandler
DROP INDEX
Removes an index
LogicalDropIndexHandler
TRUNCATE TABLE
Removes all data from a table
LogicalTruncateTableHandler
RENAME TABLE
Renames a table
LogicalRenameTableHandler

所有处理程序都遵循LogicalCommonDdlHandler
定义的通用结构,但实现专门的逻辑:

  • 根据操作类型创建特定JOB
  • 特定操作的验证逻辑
  • 根据操作需求生成结果游标

异步执行模型

PolarDB-X 默认对 DDL 操作使用异步执行模型,允许长时间运行的操作进行而不会阻塞客户端连接。

异步执行模型的关键信息:

  • 异步模式返回JOB ID,用于稍后的状态检查
  • 同步模式等待完成后再返回客户端
  • 子JOB允许分解复杂的操作
  • 状态跟踪允许监控和恢复

错误处理和恢复

DDL操作可能由于各种原因失败。PolarDB-X 包含错误处理和恢复机制:

  • 验证错误:在创建作业之前发现,并立即报告给客户
  • 执行错误:在作业状态中跟踪,可以触发回滚
  • 连接被重置:检测并处理,允许作业完成
  • 中断的JOB:可以暂停、恢复或回滚
  • 临时JOB:适用于不需要恢复的操作

当 DDL 操作在执行过程中失败时:

  • 错误状态记录在JOB中
  • 回滚任务可能会自动触发
  • JOB状态可供查询
  • 错误信息被保存用于诊断

执行 CREATE TABLE

CREATE TABLE操作是PolarDB-X支持的最复杂的DDL操作之一。

CREATE TABLE 执行的关键方面:

  • 列定义和约束处理
  • 使用自动命名匿名索引创建索引
  • 外键验证和处理
  • 存储引擎、字符集和排序规则处理
  • 分区信息处理
  • table group 关联
  • 用于复制的 CDC 集成

总结

PolarDB-X 中的 DDL 执行系统提供了一个强大的框架,用于处理分布式数据库环境中的 schema 更改。它提供:

  • 所有 DDL 操作的一致验证和执行管道
  • 与 CDC 集成以复制 schema 更改
  • 长时间运行操作的异步执行
  • 状态跟踪和恢复机制
  • 针对不同类型 DDL 操作的专用处理程序

这种架构使 PolarDB-X 能够保持数据一致性,同时允许灵活的管理跨分布式表 schema 。

欢迎关注PolarDB公众号.

如需“商务咨询“或”开源交流“, 速加小编微信.


文章转载自PolarDB,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论