You need to enable JavaScript to run this app.
导航

创建无锁 SQL 变更工单

最近更新时间2024.04.02 16:48:14

首次发布时间2024.03.20 22:07:18

数据库工作台 DBW 提供无锁 SQL 变更功能,该功能可以将单条 SQL 语句拆分成多个批次执行,适用于大量数据变更的场景,例如清理历史数据、备份大量数据等,可以提高数据库的性能和可扩展性。本文介绍如何在 DBW 控制台创建无锁 SQL 变更工单。

前提条件

  • 已创建云数据库 MySQL 版实例和账号。详细操作,请参见创建实例账号

  • 实例已开启安全管控。详细操作,请参见开启安全管控

  • 已添加为 DBW 角色的用户。详细操作,请参见添加用户

  • 已授予添加为 DBW 角色用户相关权限。详细操作,请参见权限管理

使用限制

  • 在创建无锁 SQL 变更工单时,选择的表需要有非空唯一索引或主键。

  • 仅支持选择开启安全管控的实例创建 SQL 变更工单进行纳管。

  • 仅支持在 DBW 用户管理内添加的用户创建工单。

  • 支持的 SQL 类型包括 UPDATEINSERT_SELECTDELETE。关于 SQL 类型的具体限制如下表所示。

    SQL 类型限制说明
    • UPDATE

    • DELETE

    • 仅支持 UPDATE 或 DELETE 单表操作。

    • 不支持 UPDATE、DELETE 包含子查询筛选条件。

    • 不支持 LIMIT 子句。

    • UPDATE 的列不能是主键列

    INSERT_SELECT

    • SELECT 子句仅支持单表操作。

    • SELECT 部分不支持 LIMIT、ORDER BY、GROUP BY 等子句。

适用场景

  • 目标表为大表且更新语句时不使用索引。

  • 单条 SQL 事务太大,超出 Binlog 的限制。

  • 清理历史数据。

  • 大量数据需要备份。

优势

无锁 SQL 变更可以提高数据库的性能和可扩展性,具体如下所示:

  • 性能高:无锁 SQL 变更在进行数据读取时不会加锁,减少了锁的开销,能够提高系统的处理性能和并发量。

  • 可扩展性强:无锁 SQL 变更通过减少锁定,提高了系统的扩展性,使得系统能够处理更多的并发用户和事务。

执行原理

  • 分批执行单条 SQL:数据库工作台 DBW 将单条 SQL 拆分成多个批次执行。默认情况下,按照主键从小到大的顺序分批执行,直到扫描完所有行。

  • 每个批次执行后有 sleep(暂停)时间进行缓冲。

操作步骤

  1. 登录 DBW 控制台

  2. 在顶部菜单栏,选择地域。

  3. 在左侧导航栏,选择数据管理 > 工单列表

  4. 工单列表页面,单击创建工单

  5. 创建工单对话框,配置以下参数信息。

    参数说明
    创建人默认为当前登录的账号,不支持修改。
    数据库类型当前只有云数据库 MySQL 版实例支持被纳管,因此默认为云数据库 MySQL 版,且不支持修改。

    工单类型

    选择无锁 SQL 变更
    SQL 变更表示通过 UPDATEINSERT_SELECTDELETE 语句变更数据库中的数据,该变更通常用于改变数据库中的数据内容,但不会改变数据库的结构。

    执行方式

    按需选择执行方式,支持以下选择:

    • 审批后自动执行:审批后将自动执行 SQL 语句。

    • 审批后手动执行:审批后需申请人自行执行工单。

    实例从下拉列表中选择需要创建工单的实例。
    数据库从下拉列表中选择需要创建工单的数据库。
    SQL 文本按需设置 SQL 语句。单次提交多条 SQL 语句时需用英文逗号(,)隔开。SQL 变更支持的 SQL 语句包括 UPDATEINSERTDELETE

    分批执行

    按需设置以下信息:

    • 每批执行行:默认值为 1000,取值范围需大于等于 1000。

    • 每 1 万行 sleep 时间:默认值为 0.5s,取值需大于等于 0。单位秒(s)。

    • (可选)是否开启主备延迟检查:按需设置是否开启主备延迟。开启后当主备延迟大于设置的值时,则执行任务将被中断。

      说明

      关闭主备延迟检查,可能导致主备延迟过大,影响主备切换。

  6. 单击提交工单

后续操作