跳到主要内容

使用 NineData OnlineDDL 对表结构进行无锁变更

NineData 的 SQL 任务支持 NineData OnlineDDL 功能,该功能可以在不阻塞表正常读写的情况下,对该表执行结构变更。

功能说明

传统的 DDL 语句(例如 ALTER TABLE)需要在锁定表的情况下执行,锁定期间会阻止对表的任何其他修改,这可能会导致阻塞时间过长,影响应用程序的运行。

NineData 的 SQL 任务支持 NineData OnlineDDL 功能,该功能的实现流程如下:

flow

  1. 创建一个与源表结构相同的新表,并在该表上执行表结构变更。
  2. 在变更期间,源表中的增量数据会实时同步到新表。
  3. 将源表中的全量数据拷贝到新表。
  4. 在新表数据追平源表后,后台会自动选择一个最佳时机,将业务从源表切换到新表。

上述流程可以确保在不锁表的情况下完成表结构变更,并且不会对应用程序的运行产生负面影响。

前提条件

  • 已创建或加入组织,并且该组织已开通,同时请确保您的包年包月订阅未过期。更多信息,请参见管理组织
  • 当前账号已切换到目标组织。更多信息,请参见切换到组织
  • 您的角色为。更多关于角色的信息,请参见角色
  • 数据源类型为 MySQL。

注意事项

NineData OnlineDDL 的新旧表业务切换可能会导致业务秒级闪断,请尽量在业务低峰期执行表结构变更 SQL 任务。

操作步骤

OnlineDDL 在 NineData 提供的 SQL 规范中默认开启,仅需根据实际业务场景更改规范的执行策略,并将该规范关联到目标数据源即可生效,本文介绍如何更改 OnlineDDL 的执行策略。

  1. 登录 NineData 控制台

  2. 在左侧导航栏,单击>

  3. 页面,单击 页签。

  4. 单击目标,或单击其右侧列的

  5. 页面的页签中找到 ,并单击其右侧列的

    提示

    请确保 处于开启状态,即列的开关已开启。

  6. 配置 Online DDL 的执行策略,各主要参数的说明请参见下表。

    参数
    说明
    执行 OnlineDDL 的方式。
    • :使用 MySQL 自带的 OnlineDDL 执行表结构修改。
    • :系统预先检测目标 DDL 语句是否支持通过 MySQL 自带的 OnlineDDL 执行,如果不支持,则使用 NineData OnlineDDL 执行;如果支持,则优先使用 MySQL 自带 OnlineDDL。
    • :直接使用 NineData 的 OnlineDDL 执行。
    OnlineDDL 无法顺利完成时的策略。
    • :不通过 OnlineDDL 的方式执行表结构变更任务,转而使用通常的锁表变更。
    • :不再执行该表结构变更任务,任务结束。
    使用 NineData OnlineDDL 成功进行不锁表结构变更后,源表的清理策略。
    • :业务切换到新表之后,后台自动清理源表。
    • :业务切换到新表之后,保留源表。选择该选项,您需要手动对源表进行清理操作。
    配置业务切换时,源表的锁定超时时间,锁表时长超过该时间则切换失败,默认 2 秒。
    说明:无锁变更任务结束以后,系统将锁定源表以防止新数据写入,然后将业务从源表切换到新表,锁表时长受数据库负载影响,您可以根据实际情况配置该参数。
    无锁变更任务结束以后,源表切换到新表的失败重试次数,默认 5 次。
    是否根据数据库的性能,动态调整每次拷贝到临时表的行数,默认开启。
    手动配置每次拷贝到临时表的行数,默认 10000 行。开启的情况下,该配置无效。
    提示

    完成新旧表业务切换后(即对应 SQL 任务的状态变更为),NineData OnlineDDL 会将旧表命名为 _<表名>_<时间>_del,其中时间为新表被创建时的时间,包含了年月日时分秒。如果您在 规范中配置了,则还需要手动删除该名称的表。

    例如:你使用 NineData OnlineDDL 对名为 t1 的表执行了不锁表结构变更,则新旧表业务切换完成后,数据库中会多出一个名为 _t1_20230209173740_del(示例)的表,如果您没有其他命名规则相似的表,则可以放心删除该表。

  7. 单击

效果展示

完成 OnlineDDL 的规则配置后,对配置了该策略的数据源提交包含 DDL 语句的 SQL 任务,系统会在规范预检阶段自动检测该 DDL 语句是否支持 MySQL OnlineDDL,如果不支持,则会启用 NineData OnlineDDL 进行无锁表结构变更。

OnlineDDL

配置 OnlineDDL 运行参数

当 SQL 任务通过 NineData OnlineDDL 执行时,您可以在 页面配置 OnlineDDL 的运行参数,包含

  1. 登录NineData 控制台

  2. 在左侧导航栏,单击 >

    提示

    如果未找到 ,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织

  3. 页面,找到目标 SQL 任务,单击其

  4. 页面,单击,然后单击 右侧的

  5. 在弹出的页面中,单击需要配置参数右侧的edit,参数说明请参见下表。

    运行参数
    说明
    配置业务切换时,源表的锁定超时时间,锁表时长超过该时间则切换失败。
    说明:无锁变更任务结束以后,系统将锁定源表以防止新数据写入,然后将业务从源表切换到新表,锁表时长受数据库负载影响,您可以根据实际情况配置该参数。
    无锁变更任务结束以后,源表切换到新表的失败重试次数,默认 5 次。
    配置每次拷贝到临时表的行数,默认情况下根据数据库的性能动态调整。
    指定业务切换的时间段,默认情况下变更完成后立刻切换,您可根据您的需求将切换时间调整为您的业务低峰期。
  6. 配置完成后,单击即可。

查看 OnlineDDL 运行进度

当 SQL 任务通过 NineData OnlineDDL 执行时,您可以在 页面查看 OnlineDDL 的整体运行进度。

  1. 登录NineData 控制台

  2. 在左侧导航栏,单击 >

    提示

    如果未找到 ,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织

  3. 页面,找到目标 SQL 任务,单击其

  4. 页面找到,然后单击列下的

  5. 页面,您可以查看 OnlineDDL 的运行状态,还可以配置。关于运行参数的详情,请参见配置 OnlineDDL 运行参数