华为云用户手册

  • 功能介绍 社区MySQL的LIMIT(N)/OFFSET(P)的SELECT语句,引擎层返回所有满足WHERE条件的行给SQL层处理,SQL丢弃OFFSET对应的P行,返回N行数据。当查询二级索引需要访问主表列的时候,引擎层还会先返回表获取所有需要的列信息。对于OFFSET的P远大于LIMIT的N的时候,将会导致引擎层反馈大量的数据到SQL层处理。 GaussDB (for MySQL)提供的LIMIT OFFSET下推功能是把LIMIT OFFSET下推到引擎层处理,提升查询效率。 父主题: LIMIT OFFSET下推
  • 操作步骤 生成测试数据。 请在https://github.com/electrum/tpch-dbgen下载TPCH共用源码。 请在下载的源码文件中,找到makefile.suite文件,并按照如下内容进行修改,修改完成后进行保存。 CC = gcc # Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata) # SQLSERVER, SYBASE, ORACLE # Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS, # SGI, SUN, U2200, VMS, LINUX, WIN32 # Current values for WORKLOAD are: TPCH DATABASE= SQLSERVER MACHINE = LINUX WORKLOAD = TPCH 在源码根目录下,执行下列命令,编译生成TPCH数据工具dbgen。 make -f makefile.suite 使用dbgen执行如下命令,生成TPCH数据100G。 ./dbgen -s 100 登录目标GaussDB(for MySQL)实例,创建目标数据库,并使用如下命令创建TPCH的表。 CREATE TABLE nation ( N_NATIONKEY INTEGER NOT NULL, N_NAME CHAR(25) NOT NULL, N_REGIONKEY INTEGER NOT NULL, N_COMMENT VARCHAR(152)); CREATE TABLE region ( R_REGIONKEY INTEGER NOT NULL, R_NAME CHAR(25) NOT NULL, R_COMMENT VARCHAR(152)); CREATE TABLE part ( P_PARTKEY INTEGER NOT NULL, P_NAME VARCHAR(55) NOT NULL, P_MFGR CHAR(25) NOT NULL, P_BRAND CHAR(10) NOT NULL, P_TYPE VARCHAR(25) NOT NULL, P_SIZE INTEGER NOT NULL, P_CONTAINER CHAR(10) NOT NULL, P_RETAILPRICE DECIMAL(15,2) NOT NULL, P_COMMENT VARCHAR(23) NOT NULL ); CREATE TABLE supplier ( S_SUPPKEY INTEGER NOT NULL, S_NAME CHAR(25) NOT NULL, S_ADDRESS VARCHAR(40) NOT NULL, S_NATIONKEY INTEGER NOT NULL, S_PHONE CHAR(15) NOT NULL, S_ACCTBAL DECIMAL(15,2) NOT NULL, S_COMMENT VARCHAR(101) NOT NULL); CREATE TABLE partsupp ( PS_PARTKEY INTEGER NOT NULL, PS_SUPPKEY INTEGER NOT NULL, PS_AVAILQTY INTEGER NOT NULL, PS_SUPPLYCOST DECIMAL(15,2) NOT NULL, PS_COMMENT VARCHAR(199) NOT NULL ); CREATE TABLE customer ( C_CUSTKEY INTEGER NOT NULL, C_NAME VARCHAR(25) NOT NULL, C_ADDRESS VARCHAR(40) NOT NULL, C_NATIONKEY INTEGER NOT NULL, C_PHONE CHAR(15) NOT NULL, C_ACCTBAL DECIMAL(15,2) NOT NULL, C_MKTSEGMENT CHAR(10) NOT NULL, C_COMMENT VARCHAR(117) NOT NULL); CREATE TABLE orders ( O_ORDERKEY INTEGER NOT NULL, O_CUSTKEY INTEGER NOT NULL, O_ORDERSTATUS CHAR(1) NOT NULL, O_TOTALPRICE DECIMAL(15,2) NOT NULL, O_ORDERDATE DATE NOT NULL, O_ORDERPRIORITY CHAR(15) NOT NULL, O_CLERK CHAR(15) NOT NULL, O_SHIPPRIORITY INTEGER NOT NULL, O_COMMENT VARCHAR(79) NOT NULL); CREATE TABLE lineitem ( L_ORDERKEY INTEGER NOT NULL, L_PARTKEY INTEGER NOT NULL, L_SUPPKEY INTEGER NOT NULL, L_LINENUMBER INTEGER NOT NULL, L_QUANTITY DECIMAL(15,2) NOT NULL, L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL, L_DISCOUNT DECIMAL(15,2) NOT NULL, L_TAX DECIMAL(15,2) NOT NULL, L_RETURNFLAG CHAR(1) NOT NULL, L_LINESTATUS CHAR(1) NOT NULL, L_SHIPDATE DATE NOT NULL, L_COMMITDATE DATE NOT NULL, L_RECEIPTDATE DATE NOT NULL, L_SHIPINSTRUCT CHAR(25) NOT NULL, L_SHIPMODE CHAR(10) NOT NULL, L_COMMENT VARCHAR(44) NOT NULL); 使用如下命令,将生成的数据导入到TPCH的表中。 load data INFILE '/path/customer.tbl' INTO TABLE customer FIELDS TERMINATED BY '|'; load data INFILE '/path/region.tbl' INTO TABLE region FIELDS TERMINATED BY '|'; load data INFILE '/path/nation.tbl' INTO TABLE nation FIELDS TERMINATED BY '|'; load data INFILE '/path/supplier.tbl' INTO TABLE supplier FIELDS TERMINATED BY '|'; load data INFILE '/path/part.tbl' INTO TABLE part FIELDS TERMINATED BY '|'; load data INFILE '/path/partsupp.tbl' INTO TABLE partsupp FIELDS TERMINATED BY '|'; load data INFILE '/path/orders.tbl' INTO TABLE orders FIELDS TERMINATED BY '|'; load data INFILE '/path/lineitem.tbl' INTO TABLE lineitem FIELDS TERMINATED BY '|'; 创建TPCH表的索引。 alter table region add primary key (r_regionkey); alter table nation add primary key (n_nationkey); alter table part add primary key (p_partkey); alter table supplier add primary key (s_suppkey); alter table partsupp add primary key (ps_partkey,ps_suppkey); alter table customer add primary key (c_custkey); alter table lineitem add primary key (l_orderkey,l_linenumber); alter table orders add primary key (o_orderkey); 请在https://github.com/dragansah/tpch-dbgen/tree/master/tpch-queries获取TPCH 22个查询query语句,并进行相应操作。
  • 开启多表连接DISTINCT优化 表1 参数说明 参数名称 级别 描述 rds_nlj_distinct_optimize Global,Session DISTINCT优化特性开关,默认值为OFF。 ON:开启DISTINCT优化特性。 OFF:关闭DISTINCT优化特性。 除了使用上述开关来控制优化特性生效或者不生效,还可以使用HINT来实现,语法如下。 开启DISTINCT优化特性 /*+ SET_VAR(rds_nlj_distinct_optimize=ON) */ 关闭 DISTINCT 优化特性 /*+ SET_VAR(rds_nlj_distinct_optimize=OFF) */
  • 性能测试 GaussDB(for MySQL)执行耗时2.7秒完成,只需要扫描约61万行数据。相比MySQL 8.0 社区版本执行耗时约186秒,扫描数据量4400万,执行效率大大提升。 如下示例中,对7个表连接后的结果做DISTINCT,使用MySQL 8.0.30社区版本,执行耗时186秒,扫描了约4400万行数据。 GaussDB(for MySQL)执行耗时2.7秒,扫描约61万行数据。 查询语句: select distinct ed.code,et.* from ele_template et left join ele_template_tenant ett on ett.template_id = et.id left join ele_relation tm on tm.tom_id = et.id and tm.jerry_type = 'chapter' left join ele_relation mv on mv.tom_id = tm.jerry_id and mv.jerry_type = 'variable' left join ele_relation cv on cv.jerry_id = mv.jerry_id and cv.tom_type = 'column' left join ele_doc_column edc on edc.id = cv.tom_id left join ele_doc ed on ed.id = edc.doc_id where ett.uctenantid = 'mmo0l3f8' and ed.code = 'contract' and et.billtype = 'contract' order by ifnull(et.utime,et.ctime) desc limit 0,10;
  • INTERVAL RANGE分区表与任意类型表的相互转换 语法: 其他类型表转化为INTERVAL RANGE分区表。 ALTER TABLE table_name table_definition partition_options; ​ partition_options: PARTITION BY { RANGE{(expr) | COLUMNS(column_list)} } { INTERVAL(type, value) | INTERVAL(value) } [(partition_definition [, partition_definition] ...)] ​ partition_definition: PARTITION partition_name [VALUES LESS THAN {expr | MAXVALUE}] [[STORAGE] ENGINE [=] engine_name] [COMMENT [=] 'string' ] [DATA DIRECTORY [=] 'data_dir'] [INDEX DIRECTORY [=] 'index_dir'] [MAX_ROWS [=] max_number_of_rows] [MIN_ROWS [=] min_number_of_rows] [TABLESPACE [=] tablespace_name] INTERVAL子句关联参数说明: 表3 参数说明 参数名称 参数说明 INTERVAL(value) 使用RANGE(expr) 或者 RANGE COLUMNS(column_list)且column是整型字段时,INTERVAL子句的格式,其中value代表间隔数值,必须是正整数。 expr RANGE(expr)中的分区表达式,目前只支持整数类型。 column_list RANGE COLUMNS(column_list)的分区字段列表,在INTERVAL RANGE分区表中,column_list只能是单列。 INTERVAL(type, value) 使用RANGE COLUMNS(column_list)且column_list是DATE/TIME/DATETIME类型时,INTERVAL子句的格式,其中type代表间隔类型,value代表间隔数值。 type目前支持8种时间类型(YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND)。 value代表间隔数值,必须是正整数;当type为SECOND类型时,间隔不能小于60。 INTERVAL RANGE分区表转化为其他任意类型的表,这里partition_options是可选的。 ALTER TABLE table_name table_definition [partition_options]; 示例: 将其他类型表转为INTERVAL RANGE表: CREATE TABLE orders( orderkey BIGINT NOT NULL, custkey BIGINT NOT NULL, orderdate DATE NOT NULL ); ​ ALTER TABLE orders PARTITION BY RANGE COLUMNS(orderdate) INTERVAL(MONTH, 1) ( PARTITION p0 VALUES LESS THAN('2021-10-01') ); 将INTERVAL RANGE表转化为其他类型表: CREATE TABLE orders (a INT, b DATETIME) PARTITION BY RANGE (a) INTERVAL(10) ( PARTITION p0 VALUES LESS THAN(10), PARTITION p2 VALUES LESS THAN(20) ); ​ ALTER TABLE orders PARTITION BY LIST COLUMNS (a) ( PARTITION p0 VALUES IN (1, 11, 25) ); 修改INTERVAL RANGE表的INTERVAL子句信息: CREATE TABLE orders (a INT, b DATETIME) PARTITION BY RANGE (a) INTERVAL(10) ( PARTITION p0 VALUES LESS THAN(10), PARTITION p2 VALUES LESS THAN(20) ); ​ ALTER TABLE orders PARTITION BY RANGE (a) INTERVAL(20) ( PARTITION p0 VALUES LESS THAN(10), PARTITION p2 VALUES LESS THAN(20) ); ​ # 消除INTERVAL子句 ALTER TABLE orders PARTITION BY RANGE (a) ( PARTITION p0 VALUES LESS THAN(10), PARTITION p2 VALUES LESS THAN(20) ); ​ # 添加INTERVAL子句 ALTER TABLE orders PARTITION BY RANGE (a) INTERVAL(100) ( PARTITION p0 VALUES LESS THAN(10), PARTITION p2 VALUES LESS THAN(20) );
  • 使用限制 INTERVAL RANGE表只支持HASH/KEY二级分区。 采取RANGE COLUMNS(column_list) INTERVAL([type], value)形式描述INTERVAL RANGE规则时: column_list(分区键)中列个数只能为1,并且只能是是整数类型或者DATE/TIME/DATETIME类型。 如果分区键是整型,INTERVAL的间隔类型type不需要填写。 如果分区键为DATE类型,INTERVAL的间隔类型type只能取YEAR、QUARTER、MONTH、WEEK、DAY。 如果分区键为TIME类型,INTERVAL的间隔类型type只能取HOUR、MINUTE、SECOND。 如果分区间为DATETIME类型,INTERVAL的间隔类型type可以取YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND。 间隔值value只能为正整数。 如果INTERVAL的间隔类型是SECOND,间隔不能小于60。 采取RANGE(expr) INTERVAL(value)形式描述INTERVAL RANGE规则时,expr表达式的结果应为整数,间隔值value只能为正整数。 不支持使用INSERT ...SELECT语句、INSERT ...ON DUPLICATE KEY UPDATE语句、UPDATE语句触发分区新增。 LOAD DATA时不会触发分区新增(如果分区覆盖了所有插入数据的范围,能使用load data导入数据,如果分区没有覆盖插入数据的范围,load data无法触发自增分区,导入数据失败)。 事务中如果触发分区自增,一旦新分区创建成功,不支持回滚。 自增的分区使用'_p'作为分区名的前缀,因此客户设置的以此开头的分区名可能导致分区自增失败。 SET INTERVAL([type], value)子句只适用于INTERVAL RANGE表和RANGE表,如果这两种表有二级分区,只支持二级分区为HASH或KEY类型。 SET INTERVAL([type], value)子句的type和value取值要受原表的分区表达式expr或分区键column_list的约束。
  • SET INTERVAL子句支持 支持使用SET INTERVAL子句修改INTERVAL RANGE表定义的INTERVAL子句间隔类型和间隔值,也可实现消除或添加INTERVAL子句。 语法: ALTER TABLE table_name SET INTERVAL {() | (type, value) | (value)}; 表4 参数说明 参数名称 参数说明 type 目前支持8种时间类型(YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND),不显式指定默认是数字类型的间隔。 value 指定间隔的数值大小。当type为SECOND类型时,间隔不能小于60。 示例: 修改INTERVAL RANGE表的INTERVAL类型和值。 CREATE TABLE orders( orderkey BIGINT NOT NULL, custkey BIGINT NOT NULL, orderdate DATE NOT NULL ) PARTITION BY RANGE COLUMNS(orderdate) INTERVAL(MONTH, 1) ( PARTITION p0 VALUES LESS THAN('2021-10-01') ); ​ ALTER TABLE orders SET INTERVAL(YEAR, 1); 实现RANGE表和INTERVAL RANGE表之间的转化。 CREATE TABLE orders( orderkey BIGINT NOT NULL, custkey BIGINT NOT NULL, orderdate DATE NOT NULL ) PARTITION BY RANGE COLUMNS(orderdate) INTERVAL(MONTH, 1) ( PARTITION p0 VALUES LESS THAN('2021-10-01') ); ​ # 删除INTERVAL子句 ALTER TABLE sales SET INTERVAL(); ​ # 添加INTERVAL子句 ALTER TABLE sales SET INTERVAL(DAY, 60); 即使当前功能开关rds_interval_range_enabled关闭,"ALTER TABLE table_name SET INTERVAL()"语句也可使用(用于消除INTERVAL RANGE表的INTERVAL子句定义信息,转化为普通RANGE表)。
  • 创建INTERVAL RANGE分区表 INTERVAL RANGE分区表定义格式类似于RANGE分区表,但多了INTERVAL子句。 语法: CREATE TABLE [IF NOT EXISTS] [schema.]table_name table_definition partition_options; 其中,partition_options为: PARTITION BY RANGE {(expr) | COLUMNS(column_list)} {INTERVAL(value) | INTERVAL(type, expr)} (partition_definition [, partition_definition] ...) partition_definition为: PARTITION partition_name [VALUES LESS THAN {expr | MAXVALUE}] [[STORAGE] ENGINE [=] engine_name] [COMMENT [=] 'string' ] [DATA DIRECTORY [=] 'data_dir'] [INDEX DIRECTORY [=] 'index_dir'] [MAX_ROWS [=] max_number_of_rows] [MIN_ROWS [=] min_number_of_rows] [TABLESPACE [=] tablespace_name] 其中,INTERVAL子句仅支持设置间隔数值(value)和间隔类型(type)。 INTERVAL子句关联参数说明: 表2 参数说明 参数名称 参数说明 INTERVAL(value) 使用RANGE(expr) 或者 RANGE COLUMNS(column_list)且column是整型字段时,INTERVAL子句的格式,其中value代表间隔数值,必须是正整数。 expr RANGE(expr)中的分区表达式,目前只支持整数类型。 column_list RANGE COLUMNS(column_list)的分区字段列表,在INTERVAL RANGE分区表中,column_list只能是单列。 INTERVAL(type, value) 使用RANGE COLUMNS(column_list)且column_list是DATE/TIME/DATETIME类型时,INTERVAL子句的格式,其中type代表间隔类型,value代表间隔数值。 type目前支持8种时间类型(YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、SECOND)。 value代表间隔数值,必须是正整数;当type为SECOND类型时,间隔不能小于60。 间隔数值(value)和间隔类型(type)的进一步说明:
  • 语法 扩展column_definition定义,支持在CREATE TABLE/ALTER TABLE ADD/ALTER TABLE CHANGE/ALTER TABLE MODIFY场景定义列属性时使用压缩特性。 create_definition: { col_name column_definition | {INDEX | KEY} [index_name] [index_type] (key_part,...) [index_option] ... | {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name] (key_part,...) [index_option] ... | [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (key_part,...) [index_option] ... | [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY] [index_name] [index_type] (key_part,...) [index_option] ... | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (col_name,...) reference_definition | check_constraint_definition } alter_option: { table_options | ADD [COLUMN] col_name column_definition [FIRST | AFTER col_name] | ADD [COLUMN] (col_name column_definition,...) | CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST | AFTER col_name] | MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name] ... 其中column_definition为: column_definition: { data_type [NOT NULL | NULL] [DEFAULT {literal | (expr)} ] [VISIBLE | INVISIBLE] [AUTO_INCREMENT] [UNIQUE [KEY]] [[PRIMARY] KEY] [COMMENT 'string'] [COLLATE collation_name] [COLUMN_FORMAT {FIXED | DYNAMIC | DEFAULT}] [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}|COMPRESSED[={ZLIB|ZSTD}**]] [ENGINE_ATTRIBUTE [=] 'string'] [SECONDARY_ENGINE_ATTRIBUTE [=] 'string'] [STORAGE {DISK | MEMORY}] [reference_definition] [check_constraint_definition] | data_type [COLLATE collation_name] [GENERATED ALWAYS] AS (expr) [VIRTUAL | STORED] [NOT NULL | NULL] [VISIBLE | INVISIBLE] [UNIQUE [KEY]] [[PRIMARY] KEY] [COMMENT 'string'] [reference_definition] [check_constraint_definition] }
  • 使用须知 GaussDB(for MySQL)实例内核版本大于等于2.0.54.240600可使用该功能。 不支持分区表、临时表、非InnoDB引擎表。 压缩字段上不能包含索引(主键、唯一索引、二级索引、外键、全文索引)。 仅支持的数据类型:BLOB(包含TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB),TEXT(包含TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT),VARCHAR,VARBINARY。 不支持在生成列上使用此特性。 不支持在分区表和带有压缩字段的表之间执行EXCHANGE PARTITION式语句。 不支持IMPORT TABLESPACE。 仅支持在CREATE TABLE/ALTER TABLE ADD/ALTER TABLE CHANGE/ALTER TABLE MODIFY场景使用此特性。 ALTER TABLE ADD COLUMN不支持INSTANT算法,ALTER TABLE {CHANGE|MODIFY} 语法涉及数据变化时不支持使用INSTANT算法。 自动压缩场景(rds_column_compression=2),定义字段的最大长度需大于等于字段压缩阈值(rds_column_compression_threshold)时才可以被添加压缩属性;显式压缩场景(rds_column_compression=1),若定义压缩字段的最大长度小于字段压缩阈值,字段仍可被添加压缩属性,同时收到warning信息。 若当前表中包含压缩字段,暂不支持NDP计算下推。 客户手动拉取BIN LOG 同步过程中ALTER语句会出现不兼容的问题,推荐客户侧使用HINT的方式来解决。 利用DRS迁移至无该特性的实例,压缩属性被消除。全量迁移任务可以进行,增量迁移时ALTER语句中存在压缩字段会导致迁移任务失败。 物理备份方面,利用备份去做数据恢复的版本也必须是带有字段压缩特性的。 升级至新版本之后,如果已经使用字段压缩功能,不支持回退至无该特性的版本。
  • 特性参数说明 表1 参数说明 参数名称 描述 取值范围 默认值 级别 是否动态生效 rds_column_compression 当参数取值为0时,表示字段压缩特性关闭,不再支持显式或者自动创建压缩列。 当参数取值为1时,表示仅支持显式创建压缩列。 当参数取值为2时,表示同时支持显式或自动创建压缩列。 [0,2] 0 GLOBAL 是 rds_default_column_compression_algorithm 设置字段压缩特性默认的压缩算法,适用于如下场景: 显式创建压缩字段而不指定具体的压缩算法。 自动压缩场景。 ZLIB或ZSTD ZLIB GLOBAL 是 rds_column_compression_threshold 设置字段压缩特性的阈值。 当列定义最大长度小于此阈值时,可以显式创建压缩列,但会收到提示信息,不能自动地创建压缩列。 当列定义最大长度大于等于此阈值时,支持显式或者自动创建压缩列。 [20-4294967295] 100 GLOBAL 是 rds_zlib_column_compression_level 控制字段压缩特性中zlib压缩算法的压缩级别。 当参数取值为0时代表不压缩。 取值为除0外范围内的其他参数值时,取值越小,压缩速度越快但压缩效果越差;取值越大,压缩速度越慢但压缩效果越好。 [0,9] 6 GLOBAL 是 rds_zstd_column_compression_level 控制字段压缩特性中zstd压缩算法的压缩级别。 取值越小,压缩速度越快但压缩效果越差;取值越大,压缩速度越慢但压缩效果越好。 [1,22] 3 GLOBAL 是
  • 使用示例 表回收站功能提供以下命令用于操作回收站中暂存的表。 查看回收站中暂存的表 call dbms_recyclebin.show_tables(); 返回结果格式如下: +----------------+--------------------------+---------------+--------------+---------------------+---------------------+ | SCHEMA | TABLE | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME | PURGE_TIME | +----------------+--------------------------+---------------+--------------+---------------------+---------------------+ | __recyclebin__ | __innodb_test_db_t1_1069 | test_db | t1 | 2024-09-29 08:48:27 | 2024-10-02 08:48:27 | | __recyclebin__ | __innodb_test_db_t2_1070 | test_db | t2 | 2024-09-29 08:48:44 | 2024-10-02 08:48:44 | +----------------+--------------------------+---------------+--------------+---------------------+---------------------+ 表3 字段说明 字段 说明 SCHEMA 回收站中表的当前库名。 TABLE 回收站中表的当前表名。 ORIGIN_SCHEMA 移入回收站前的原库名。 ORIGIN_TABLE 移入回收站前的原表名。 RECYCLED_TIME 表被移入回收站的时间。 PURGE_TIME 预计表被自动清理的时间。 恢复回收站中的表 恢复回收站中的表到原库原表 call dbms_recyclebin.restore_table('TABLE_NAME'); 表4 参数说明 参数名称 说明 TABLE_NAME 回收站中表的当前表名。 示例: 将回收站中表__innodb_test_db_t1_1069恢复到原库test_db,并保留原表名t1。 call dbms_recyclebin.restore_table('__innodb_test_db_t1_1069'); 恢复回收站中的表到指定库的指定表 call dbms_recyclebin.restore_table('TABLE_NAME', 'DEST_DB', 'DEST_TABLE'); 表5 参数说明 参数名称 说明 TABLE_NAME 回收站中表的当前表名。 DEST_DB 指定表恢复到的数据库。 DEST_TABLE 指定表恢复后的表名。 示例: 将回收站中表__innodb_test_db_t1_1069恢复到指定库test_db2,并指定恢复后的表名为t3。 call dbms_recyclebin.restore_table('__innodb_test_db_t1_1069','test_db2','t3'); 执行恢复操作前请确保目标库存在,否则恢复命令将执行失败。 执行恢复操作前请确认目标库下不存在同名表,否则恢复将执行失败。 表回收站相关命令指定的引号内的库名、表名前后不允许有多余空格。 清理回收站中指定表 call dbms_recyclebin.purge_table('TABLE_NAME'); 表6 参数说明 参数名称 说明 TABLE_NAME 回收站中表的当前表名。 示例: 手动清理回收站中表__innodb_test_db_t1_1069 call dbms_recyclebin.purge_table('__innodb_test_db_t1_1069');
  • 参数说明 您可以先使用“rds_nonblock_ddl_enable”参数开启非阻塞DDL功能,然后通过“rds_nonblock_ddl_retry_times”参数设置获取MDL-X锁超时重试的次数,“rds_nonblock_ddl_retry_interval”参数设置获取MDL-X锁超时重试的时间间隔,“rds_nonblock_ddl_lock_wait_timeout”参数设置获取MDL-X锁超时的时间。
  • 使用方法 使用SysBench创建1个测试表sbtest1, 并插入1000000行数据。 ./oltp_read_write.lua --mysql-host="集群地址" --mysql-port="端口号" --mysql-user="用户名" --mysql-password="用户密码" --mysql-db="sbtest" --tables=1 --table-size=1000000 --report-interval=1 --percentile=99 --threads=8 --time=6000 prepare 通过SysBench中的oltp_read_write.lua模拟用户业务。 ./oltp_read_write.lua --mysql-host="集群地址" --mysql-port="端口号" --mysql-user="用户名" --mysql-password="用户密码" --mysql-db="sbtest" --tables=1 --table-size=1000000 --report-interval=1 --percentile=99 --threads=8 --time=6000 run 在目标表sbtest1 上开启一个新事务但不提交,该事务持有目标表sbtest1的MDL锁。 begin; select * from sbtest1; 开启一个新会话,在开启和关闭非阻塞 DDL功能的条件下,分别对表sbtest1进行加列操作,观察TPS的变化情况。 alter table sbtest1 add column d int; 测试结果。 关闭非阻塞DDL, TPS持续跌零。默认超时时间为31536000秒,严重影响用户业务。 开启非阻塞DDL, TPS周期性下降,但未跌零,对用户业务影响较小。
  • 功能介绍 当一个事务长时间空闲且不提交,执行回滚操作时,会对数据库的资源和性能造成损耗。如果有大量的空闲事务长期不执行也不提交,在业务高峰期的时候发生回滚,性能损耗会较为严重。GaussDB(for MySQL)支持主动终止空闲事务,可针对不同类型的事务用不同的参数进行控制,当空闲事务超时后会被自动的回滚并断开连接。 内核版本为2.0.39.230300及以后的版本支持该功能。 父主题: 主动终止空闲事务
  • 开启BackwardIndexScan 表1 参数说明 参数名称 级别 描述 optimizer_switch Global,Session 查询优化的总控制开关。 其中,BackwardIndexScan子控制开关为backward_index_scan,控制是否能使用BackwardIndexScan特性,默认值为ON。 ON:优化器能选用BackwardIndexScan。 OFF:优化器不能选用BackwardIndexScan。 除了使用上述开关来控制BackwardIndexScan特性,还可以使用HINT来实现,语法如下。 在SQL语句执行期间开启Backward Index Scan特性 /*+ set_var(optimizer_switch='backward_index_scan=on') */ : 在SQL语句执行期间关闭Backward Index Scan特性 /*+ set_var(optimizer_switch='backward_index_scan=off') */ :
  • 测试环境 TaurusDB测试环境如下: 区域:华北-北京四。 可用分区:多可用区。 测试用云数据库 TaurusDB实例为一主一只读集群。 弹性云服务器(Elastic Cloud Server,简称E CS ):ECS与数据库节点在同一个可用区,规格建议选择通用计算增强型 | c7.8xlarge.4 | 32vCPUs | 128GB,操作系统镜像使用CentOS 7.6 64bit位版本。由于压测工具需要安装额外的编译工具,建议ECS绑定弹性IP。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 通过调用 IAM 服务获取用户Token接口获取。 请求响应成功后在响应消息头中包含的“X-Subject-Token”的值即为Token值。 Content-Type 是 String 内容类型。 取值:application/json。 X-Language 否 String 请求语言类型。默认en-us。 取值范围: en-us zh-cn 表3 请求Body参数 参数 是否必选 参数类型 描述 password 是 String 数据库密码。取值范围:至少包含以下字符的三种:大写字母、小写字母、数字和特殊符号|.~!@#$%^*-_=+?,()&,长度8~32个字符。建议您输入高强度密码,以提高安全性,防止出现密码被暴力破解等安全风险。如果您输入弱密码,系统会自动判定密码非法。
  • 响应示例 状态码: 200 Success. { "backups" : [ { "id" : "1fe4feaab48f11e6654hfa163eba87e4b66u", "name" : "GaussDBforMySQL-gauss-e747-20200705185048266", "begin_time" : "2018-08-06T12:41:14+0800", "end_time" : "2018-08-06T12:43:14+0800", "take_up_time" : 2, "status" : "COMPLETED", "type" : "auto", "size" : 2803, "datastore" : { "type" : "GaussDB(for MySQL)", "version" : "8.0" }, "instance_id" : "43e4feaab48f11e89039fa163ebaa7e4br01", "backup_level" : "2" } ], "total_count" : 1 }
  • 请求示例 GET https://{endpoint}/mysql/v3/97b026aa9cc4417888c14c84a1ad9860/backups?instance_id=43e4feaab48f11e89039fa163ebaa7e4br01&backup_id=c0c9f155c7b7423a9d30f0175998b63bbr01&backup_type=auto&offset=0&limit=10&begin_time=2020-07-06T10:41:14+0800&end_time=2020-07-16T10:41:14+0800
  • URI GET /mysql/v3/{project_id}/backups 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户在某一region下的project ID。 获取方法请参见获取项目ID。 表2 Query参数 参数 是否必选 参数类型 描述 instance_id 否 String 实例ID。 backup_id 否 String 备份ID。 backup_type 否 String 备份类型,取值: "auto":自动全量备份 "manual":手动全量备份 offset 否 String 索引位置,偏移量。从第一条数据偏移offset条数据后开始查询,默认为0(偏移0条数据,表示从第一条数据开始查询),必须为数字,不能为负数。 limit 否 String 查询记录数。默认为100,不能为负数,最小值为1,最大值为100。 begin_time 否 String 查询开始时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 end_time 否 String 查询结束时间,格式为“yyyy-mm-ddThh:mm:ssZ”,且大于查询开始时间。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 backups Array of backups objects 备份信息。 total_count Number 备份文件的总数。 表5 backups 参数 参数类型 描述 id String 备份ID。 name String 备份名称。 begin_time String 备份开始时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 end_time String 备份结束时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如北京时间偏移显示为+0800。 status Object 备份状态 枚举值: BUILDING:备份中。 COMPLETED:备份完成。 FAILED:备份失败。 AVAILABLE:备份可用。 take_up_time Integer 备份花费时间(单位:minutes) type Object 备份类型 枚举值: auto:自动全量备份。 manual:手动全量备份。 size Number 备份大小,(单位:MB) datastore MysqlDatastore object 数据库信息。 instance_id String 实例ID。 backup_level Object 备份级别。当开启一级备份开关时,返回该参数。 枚举值: 0:备份正在创建中或者备份失败。 1:一级备份。 2:二级备份。 description String 备份文件描述信息 表6 MysqlDatastore 参数 参数类型 描述 type String 数据库引擎,现在只支持gaussdb-mysql version String 数据库版本。 数据库支持的详细版本信息,可调用查询数据库引擎的版本接口获取。 状态码: 400 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误消息。 状态码: 500 表8 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误消息。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 是 String 用户Token。 通过调用IAM服务获取用户Token接口获取。 请求响应成功后在响应消息头中包含的“X-Subject-Token”的值即为Token值。 Content-Type 是 String 内容类型。 取值:application/json。 X-Language 否 String 请求语言类型。默认en-us。 取值范围: en-us zh-cn
  • 响应参数 状态码: 200 表3 响应Body参数 参数 参数类型 描述 job_id String 任务ID。 order_id String 订单ID。 状态码: 400 表4 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误消息。 状态码: 500 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误消息。
  • URI GET /v3/{project_id}/instances/{instance_id}/errorlog 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户在某一region下的project ID。 获取方法请参见获取项目ID。 instance_id 是 String 实例ID 表2 Query参数 参数 是否必选 参数类型 描述 start_date 是 String 开始时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如偏移1个小时显示为+0100。 end_date 是 String 结束时间,格式为“yyyy-mm-ddThh:mm:ssZ”。 其中,T指某个时间的开始;Z指时区偏移量,例如偏移1个小时显示为+0100。 offset 否 Integer 索引位置,偏移量。从第一条数据偏移offset条数据后开始查询,默认为0(偏移0条数据,表示从第一条数据开始查询),必须为数字,不能为负数 limit 否 Integer 查询记录数。默认为100,不能为负数,最小值为1,最大值为100。 level 否 String 日志级别。 取值范围: ALL INFO LOG WARNING ERROR FATAL PANIC NOTE node_id 是 String 节点ID
  • 响应示例 状态码: 200 Success. { "error_log_list" : [ { "node_id" : "cc07c60e94ec4575989840e648fb4f66no07", "time" : "2022-07-17T07:34:33", "level" : "ERROR", "content" : "[MY013508] [Repl] do failed: 1" } ] }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 error_log_list Array of MysqlErrorLogList objects 错误日志具体信息。 total_record Integer 总记录数。 表5 MysqlErrorLogList 参数 参数类型 描述 node_id String 节点ID。 time String 日期时间UTC时间。 level String 日志级别。 content String 错误日志内容。 状态码: 400 表6 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误消息。 状态码: 500 表7 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误消息。
  • 请求示例 GET https://{endpoint}/v3/054e292c9880d4992f02c0196d3ea468/instances/096c0fc43e804757b59946b80dc27f8bin07/errorlog?offset=0&limit=1&level=ALL&start_date=2022-07-10T00:00:00+0800&end_date=2022-07-19T00:00:00+0800&node_id=cc07c60e94ec4575989840e648fb4f66no07
  • URI GET /mysql/v3/{project_id}/flavors/{database_name} 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 租户在某一region下的project ID。 获取方法请参见获取项目ID。 database_name 是 String 数据库引擎名称。 表2 Query参数 参数 是否必选 参数类型 描述 version_name 否 String 数据库版本号,目前仅支持兼容MySQL 8.0。 availability_zone_mode 是 String 规格的可用区模式,现在仅支持"single"、"multi",不区分大小写。 spec_code 否 String 规格编码。
  • 响应示例 状态码: 200 Success. { "flavors" : [ { "type" : "x86", "vcpus" : "1", "ram" : "4", "id" : "3169caaf-6c2f-41d5-aadd-c8fc3d83597e", "spec_code" : "gaussdb.mysql.xlarge.x86.4", "instance_mode" : "Cluster", "version_name" : "8.0", "az_status" : { "cn-north-4a" : "normal", "cn-north-4b" : "normal" } } ] }
共100000条