DDL异步执行语法扩展

本文介绍PolarDB-X 2.0DDL异步执行语法扩展。

背景

之前PolarDB-X 2.0DDL异步执行只能通过HINT控制,例如:/*+TDDL:cmd_extra(PURE_ASYNC_DDL_MODE = true)*/,这种方式存在两个明显的问题:

  • HINT的格式和内容比较复杂,不易理解和使用。

  • 使用命令行方式时,需要-c参数HINT才会生效,容易在编写命令时遗漏。

为了解决以上问题,PolarDB-X 2.0扩展了部分DDL的语法,新增ASYNC=TRUE选项来支持异步执行。

说明

DDL中同时使用ASYNCHINT的情况下,以ASYNC的为准。

支持版本

PolarDB-X 2.0的计算节点的版本为5.4.18-17142802及以上。

说明

支持的DDL类型

重要

AUTO模式和DRDS模式的数据库都支持ASYNC=TRUE

DDL管理语句

CONTINUE DDL <JOB_ID> ASYNC=TRUE;
CANCEL DDL <JOB_ID> ASYNC=TRUE;
ROLLBACK DDL <JOB_ID> ASYNC=TRUE;
PAUSE DDL <JOB_ID> ASYNC=TRUE;
PAUSE REBALANCE <JOB_ID> ASYNC=TRUE;
CONTINUE REBALANCE <JOB_ID> ASYNC=TRUE;
CANCEL REBALANCE <JOB_ID> ASYNC=TRUE;
说明
  • 其中JOB_ID可通过SHOW DDL语句获取。

  • 更多信息,请参见DDL管理语句

OPTIMIZE TABLE

OPTIMIZE TABLE <table_name> ASYNC=TRUE;

ANALYZE TABLE

ANALYZE TABLE <table_name> ASYNC=TRUE;

ALTER TABLE

所有ALTER TABLE语句均支持异步执行,以下是一些示例:

  • 异步创建索引

    ALTER TABLE <table_name> ADD INDEX <index_name>(<column_name>) ASYNC=TRUE;
    说明

    更多信息,请参见索引

  • 异步创建全局二级索引

    ALTER TABLE <table_name> ADD GLOBAL INDEX <gsi_name>(<column_name>) PARTITION BY KEY(<column_name>) PARTITIONS <part_num> ASYNC=TRUE;
    说明

    更多信息,请参见全局二级索引(GSI)

  • 异步修改和删除列

    ALTER TABLE <table_name> MODIFY COLUMN <column_name> BIGINT ASYNC=TRUE;
    ALTER TABLE <table_name> DROP COLUMN <column_name> ASYNC=TRUE;
  • 异步分裂和迁移分区

    ALTER TABLE <table_name> SPLIT PARTITION <partition_name1> INTO
    (PARTITION <partition_name2> VALUES LESS THAN (<column_value>),
    PARTITION <partition_name3> VALUES LESS THAN(<column_value))
    ASYNC=TRUE;
    
    ALTER TABLE <table_name> MOVE PARTITIONS <partition_name[,..,partition_name]> TO <DN_ID> ASYNC=TRUE;
    
    ALTER TABLEGROUP <tablegroup_name> MOVE PARTITIONS <partition_name> TO <DN_ID> ASYNC=TRUE; -- 表组级用法
    说明

    其中DN_ID为存储节点的ID。更多信息,请参见分区分裂分区迁移

  • 异步变更表组

    ALTER TABLE <table_name> SET tablegroup=<tablegroup_name> ASYNC=TRUE;
    说明

    更多信息,请参见表组

CREATE INDEX

CREATE GLOBAL INDEX <index_name> ON <table_name> (<column_name>) PARTITION BY HASH(<column_name>) PARTITIONS <part_num> ASYNC=TRUE ;
CREATE INDEX <index_name> ON <table_name>(<column_name>) ASYNC=TRUE;

不支持的DDL类型

  • CREATE TABLE

  • DROP TABLE

  • CREATE VIEW

  • DROP VIEW

  • CREATE PROCEDURE

  • DROP PROCEDURE

  • CREATE DATABASE

  • DROP DATABASE

  • CREATE TABLEGROUP

  • DROP TABLEGROUP

  • CREATE SEQUENCE

  • DROP SEQUENCE

  • ALTER SEQUENCE