全部產品
Search
文件中心

:DDL非同步執行文法擴充

更新時間:Mar 29, 2025

本文介紹PolarDB-X 2.0的DDL非同步執行文法擴充。

背景

之前PolarDB-X 2.0的DDL非同步執行只能通過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