使用 NineData OnlineDDL 对表结构进行无锁变更
NineData 的 SQL 任务支持 NineData OnlineDDL 功能,该功能可以在不阻塞表正常读写的情况下,对该表执行结构变更。
功能说明
传统的 DDL 语句(例如 ALTER TABLE)需要在锁定表的情况下执行,锁定期间会阻止对表的任何其他修改,这可能会导致阻塞时间过长,影响应用程序的运行。
NineData 的 SQL 任务支持 NineData OnlineDDL 功能,该功能的实现流程如下:
- 创建一个与源表结构相同的新表,并在该表上执行表结构变更。
- 在变更期间,源表中的增量数据会实时同步到新表。
- 将源表中的全量数据拷贝到新表。
- 在新表数据追平源表后,后台会自动选择一个最佳时机,将业务从源表切换到新表。
上述流程可以确保在不锁表的情况下完成表结构变更,并且不会对应用程序的运行产生负面影响。
前提条件
- 您的角色为。更多关于角色的信息,请参见角色。
- 数据源类型为 MySQL。
注意事项
NineData OnlineDDL 的新旧表业务切换可能会导致业务秒级闪断,请尽量在业务低峰期执行表结构变更 SQL 任务。
操作步骤
OnlineDDL 在 NineData 提供的 SQL 规范中默认开启,仅需根据实际业务场景更改规范的执行策略,并将该规范关联到目标数据源即可生效,本文介绍如何更改 OnlineDDL 的执行策略。
登录 NineData 控制台。
在左侧导航栏,单击>。
在页面,单击 页签。
单击目标,或单击其右侧列的。
在 页面的页签中找到 ,并单击其右侧列的。
提示请确保 处于开启状态,即列的开关已开启。
配置 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
(示例)的表,如果您没有其他命名规则相似的表,则可以放心删除该表。单击。
效果展示
完成 OnlineDDL 的规则配置后,对配置了该策略的数据源提交包含 DDL 语句的 SQL 任务,系统会在规范预检阶段自动检测该 DDL 语句是否支持 MySQL OnlineDDL,如果不支持,则会启用 NineData OnlineDDL 进行无锁表结构变更。
配置 OnlineDDL 运行参数
当 SQL 任务通过 NineData OnlineDDL 执行时,您可以在 的页面配置 OnlineDDL 的运行参数,包含、、、。
登录NineData 控制台。
在左侧导航栏,单击 >。
提示如果未找到 ,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织。
在 页面,找到目标 SQL 任务,单击其。
在页面,单击,然后单击 右侧的。
在弹出的页面中,单击需要配置参数右侧的,参数说明请参见下表。
运行参数 说明 配置业务切换时,源表的锁定超时时间,锁表时长超过该时间则切换失败。
说明:无锁变更任务结束以后,系统将锁定源表以防止新数据写入,然后将业务从源表切换到新表,锁表时长受数据库负载影响,您可以根据实际情况配置该参数。无锁变更任务结束以后,源表切换到新表的失败重试次数,默认 5 次。 配置每次拷贝到临时表的行数,默认情况下根据数据库的性能动态调整。 指定业务切换的时间段,默认情况下变更完成后立刻切换,您可根据您的需求将切换时间调整为您的业务低峰期。 配置完成后,单击即可。
查看 OnlineDDL 运行进度
当 SQL 任务通过 NineData OnlineDDL 执行时,您可以在 的页面查看 OnlineDDL 的整体运行进度。
登录NineData 控制台。
在左侧导航栏,单击 >。
提示如果未找到 ,请确认您的控制台处于组织模式。如何从个人模式切换组织模式,请参见切换到组织。
在 页面,找到目标 SQL 任务,单击其。
在页面找到,然后单击列下的。
在页面,您可以查看 OnlineDDL 的运行状态,还可以配置。关于运行参数的详情,请参见配置 OnlineDDL 运行参数。