更新时间:2026-07-31 GMT+08:00
分享

无锁数据变更简介

操作场景

在高并发的数据库操作场景中,当需要对数据库表执行DDL操作时,通常会遇到因加锁导致的性能瓶颈,影响业务的正常运行。TaurusDB集成gh-ost工具提供无锁变更功能,可以在执行DDL操作时避免对原表数据加锁,从而减少对业务的影响,同时通过事务管理机制确保数据的一致性和完整性。

使用建议

  • 建议业务尽量在低峰期执行无锁热变更操作。
  • 避免变更过程中使用session变量修改环境参数,例如修改time_zone等会话级参数。
  • 避免变更期间业务侧运行长事务。
  • 避免变更后目标表的字段约束、长度、类型范围、精度相比变更前变小,如 VARCHAR 长度缩短、整型范围降级、DECIMAL 精度缩减、NULL 改为 NOT NULL(表存在空数据场景)会出现数据截断、数值溢出、数据丢失。

约束限制

  • 变更SQL语句需要使用ALTER TABLE Statement的语法形式,具体语法形式请参照官方文档ALTER TABLE Statement
  • 仅适用于企业版,部署形态为集群版的TaurusDB实例,变更前实例状态正常,主节点和只读节点状态正常。
  • 单次任务最多支持10 条不同表的变更 SQL,末尾以英文;结尾,多条ALTER 语句不可操作同一张表。
  • 当前集成gh-ost版本为v1.1.4, 不支持识别MySQL原生INSTANT算法。如有需要,请连接数据库直接执行。
  • 待变更的目标库表限制如下:
    表1 目标库表约束限制

    分类

    限制内容

    表类型限制

    不能为临时表、系统表、视图。

    存储引擎与字符集限制

    • 存储引擎必须是 InnoDB。
    • 不支持 latin1字符集的表结构。

    表结构限制

    • 不支持分区表。
    • 不支持无主键的表进行变更。
    • 主键字段类型不能为 json、float、binary 类型。
    • 不支持 SET 类型列、虚拟列。

    外键与触发器限制

    • 不支持待变更的目标表自身拥有外键,且当前表不可被其他表作为外键依赖引用。
    • 不支持待变更的目标表拥有触发器。

    字段与索引限制

    • 不支持修改整表字符集、排序规则(COLLATION)。
    • 不支持修改表存储引擎。
    • 不支持对全文索引、空间索引进行新增、删除、修改变更。

    操作限制

    • 不支持重命名、删除、修改主键,不支持新增主键。
    • 不支持表重命名操作。
    • 不允许待变更库中存在与 ~{tablename}_ghc、~{tablename}_gho 同名的表。
    • 不支持 TRUNCATE TABLE、DROP TABLE、清空表类操作。
    • 字段重命名及所有字段变更不允许附带 FIRST / AFTER 调整字段物理列顺序。

相关文档