#ALTER TABLESPACE SET

# 通用描述

ALTER TABLESPACE SET语句用于更改分布式部署中一个已存在的表空间集的相关属性。

表空间集是YashanDB分布式部署中的一个逻辑存储单位,用于存储分布表及与分布表相关数据信息,物理上对应了各DN节点上的数据文件。

目前只能指定修改非内存映射表空间集。

在分布式部署中,执行本语句时系统会检查是否存在异常未恢复DDL语句,若存在将报错并需等待对应DDL恢复成功后才能执行本语句。

Note

本文出现的所有CHUNK_NUM,均表示当前分布式部署环境中的Chunk总数量,该值可由建库参数USERS_DATASPACE_SCALE_OUT_FACTOR * 建库时DN组个数计算得到结果,其中,建库参数USERS_DATASPACE_SCALE_OUT_FACTOR在安装过程中配置且后续不可修改,可咨询数据库管理员获得该参数的值。

# 语句定义

alter tablespace set::=

syntax
ALTER TABLESPACE SET tablespace_set_name MAXSIZE size_clause NEXT size_clause RESIZE size_clause databucket_clause

databucket_clause::=

syntax
add_databucket_clause alter_databucket_clause drop_databucket_clause

add_databucket_clause::=

syntax
ADD DATABUCKET bucket_clause ,

bucket_clause::=

syntax
'bucket_name' s3_bucket_clause MAXSIZE size_clause

s3_bucket_clause::=

syntax
S3 ( URL 'url' , REGION 'region' , ACCESS KEY 'access_key' , SECRET KEY 'secret_key' )

alter_databucket_clause::=

syntax
ALTER DATABUCKET 'bucket_name' READONLY READWRITE

drop_databucket_clause::=

syntax
DROP DATABUCKET 'bucket_name'

# tablespace_set_name

表空间集的名称。

# maxsize size_clause

该语句用于修改表空间集的最大可扩展空间,不能小于原有的最大可扩展空间。

size_clause的取值范围为[128 * DB_BLOCK_SIZE * CHUNK_NUM, 4G * DB_BLOCK_SIZE * CHUNK_NUM],当DB_BLOCK_SIZE参数为默认的8K值时,该范围为[1M * CHUNK_NUM, 32T * CHUNK_NUM]。

增加表空间集的最大可扩展空间会相应地增加所有DN组上的数据文件的最大可扩展空间:

  1. 所有数据文件的最大可扩展空间之和构成了表空间集的最大可扩展空间。
  2. 当增加表空间集的最大可扩展空间时,系统将新的最大空间均分给每个DN组,每个DN组先将已有的文件的最大值扩展到最大,然后继续建立新的文件。
  3. 新建立的数据文件初始大小默认为1M ,除最后一个文件外的其它文件的最大可扩展空间为最大值。
  4. 表空间集在每个DN组上最多有一个文件的最大可扩展空间不是最大值 。

示例(分布式部署)

--查看当前USERS表空间集最大的max_size (TSS_2616为系统默认的users表空间标识符)
SELECT SUM(max_size) FROM DV$DATAFILE WHERE name LIKE '%/TSS_2616%_CHUNK_%' AND GROUP_ID > 2 AND GROUP_NODE_ID = 1;

SUM(MAX_SIZE)
-------------
   2.3090E+13

--将USERS表空间集的maxsize扩大至22T
ALTER TABLESPACE SET users MAXSIZE 22T;

# next size_clause

该语句用于修改表空间集内部的数据文件每次自动扩展的大小。

size_clause的取值范围为[512 * DB_BLOCK_SIZE, 32768 * DB_BLOCK_SIZE],当DB_BLOCK_SIZE参数为默认的8K值时,该范围为[4M,256M]。

示例(分布式部署)

--接上例
ALTER TABLESPACE SET users NEXT 100M;

--查询修改后的数据文件信息
SELECT group_id||'_'||group_node_id dn_node,
SPLIT(name,'/',-1) filename,
TS#,BYTES,RELATIVE_FNO,AUTO_EXTEND,NEXT_SIZE,MAX_SIZE 
FROM DV$DATAFILE
WHERE TS#=7
ORDER BY 3,1,2;
DN_NODE   FILENAME                     TS#      BYTES RELATIVE_FNO AUTO_EXTEND   NEXT_SIZE       MAX_SIZE 
--------- -------------------------- ----- ---------- ------------ ----------- ----------- -------------- 
3-1       TSS_1800_CHUNK_0_FILE_0        7   68157440            0 ON            104857600   549755813888
3-1       TSS_1800_CHUNK_0_FILE_1        7    1048576            1 ON            104857600   549755813888
3-1       TSS_1800_CHUNK_0_FILE_2        7    1048576            2 ON            104857600   549755813888
3-1       TSS_1800_CHUNK_0_FILE_3        7    1048576            3 ON            104857600   549755813888
4-1       TSS_1800_CHUNK_1_FILE_0        7    1048576            0 ON            104857600   549755813888
4-1       TSS_1800_CHUNK_1_FILE_1        7    1048576            1 ON            104857600   549755813888
4-1       TSS_1800_CHUNK_1_FILE_2        7    1048576            2 ON            104857600   549755813888
4-1       TSS_1800_CHUNK_1_FILE_3        7    1048576            3 ON            104857600   549755813888
5-1       TSS_1800_CHUNK_2_FILE_0        7    1048576            0 ON            104857600   549755813888
5-1       TSS_1800_CHUNK_2_FILE_1        7    1048576            1 ON            104857600   549755813888
5-1       TSS_1800_CHUNK_2_FILE_2        7    1048576            2 ON            104857600   549755813888
5-1       TSS_1800_CHUNK_2_FILE_3        7    1048576            3 ON            104857600   549755813888
																				

# resize size_clause

该语句用于修改表空间集数据文件的大小。

size_clause的取值范围为[128 * DB_BLOCK_SIZE * CHUNK_NUM, MAXSIZE],MAXSIZE表示当前表空间集的最大可扩展空间,当DB_BLOCK_SIZE参数为默认的8K时,最小值为1M * CHUNK_NUM。

当用户设置的size小于当前实际大小时,将不会进行修改。

示例(分布式部署)

--接上例
ALTER TABLESPACE SET users RESIZE 300M;

--查询修改后的数据文件信息
SELECT group_id||'_'||group_node_id dn_node,
SPLIT(name,'/',-1) filename,
TS#,BYTES,RELATIVE_FNO,AUTO_EXTEND,NEXT_SIZE,MAX_SIZE 
FROM DV$DATAFILE
WHERE TS#=7
ORDER BY 3,1,2;
DN_NODE   FILENAME                     TS#      BYTES RELATIVE_FNO AUTO_EXTEND   NEXT_SIZE       MAX_SIZE 
--------- -------------------------- ----- ---------- ------------ ----------- ----------- -------------- 
3-1       TSS_1800_CHUNK_0_FILE_0        7  104857600            0 ON            104857600   549755813888
3-1       TSS_1800_CHUNK_0_FILE_1        7    1048576            1 ON            104857600   549755813888
3-1       TSS_1800_CHUNK_0_FILE_2        7    1048576            2 ON            104857600   549755813888
3-1       TSS_1800_CHUNK_0_FILE_3        7    1048576            3 ON            104857600   549755813888
4-1       TSS_1800_CHUNK_1_FILE_0        7  104857600            0 ON            104857600   549755813888
4-1       TSS_1800_CHUNK_1_FILE_1        7    1048576            1 ON            104857600   549755813888
4-1       TSS_1800_CHUNK_1_FILE_2        7    1048576            2 ON            104857600   549755813888
4-1       TSS_1800_CHUNK_1_FILE_3        7    1048576            3 ON            104857600   549755813888
5-1       TSS_1800_CHUNK_2_FILE_0        7  104857600            0 ON            104857600   549755813888
5-1       TSS_1800_CHUNK_2_FILE_1        7    1048576            1 ON            104857600   549755813888
5-1       TSS_1800_CHUNK_2_FILE_2        7    1048576            2 ON            104857600   549755813888
5-1       TSS_1800_CHUNK_2_FILE_3        7    1048576            3 ON            104857600   549755813888
																				

# databucket_clause

该语句用于修改表空间集中的databucket(数据桶)信息。

# add_databucket_clause

该语句用于增加databucket,可同时挂载多个,以,分隔。对于新建databucket的描述与约束与CREATE TABLESPACE SET章节中databucket_clause语句相同。

# bucket_clause

CREATE TABLESPACE SET章节中bucket_clause语句描述。

# s3_bucket_clause

CREATE TABLESPACE SET章节中s3_bucket_clause语句描述。

示例(分布式部署)

ALTER TABLESPACE SET tbs_tb ADD DATABUCKET '?/lscfile3' MAXSIZE 1G;

# alter_databucket_clause

该语句用于修改databucket的读写属性,创建的databucket均默认为可读写属性。

# bucket_name

对于不同的Databucket类型,bucket_name具有不同的含义:

  • 对于本地存储的bucket,bucket_name为bucket在本地文件系统的相对路径。

  • 对于S3 bucket,bucket_name为逻辑名称,用于在数据库内查询具体的bucket信息。

# readonly|readwrite

readonly表示只读,readwrite表示可读写。

注意databucket修改为只读后不支持任何形式的写入操作,但用户执行的DML语句(非Bulkload操作)不受影响,执行Bulkload操作时由于需要生成SCOL数据,若表空间下没有可写入的databucket则会报错。

示例(分布式部署)

ALTER TABLESPACE SET tbs_tb ALTER DATABUCKET '?/lscfile3' READONLY;

# drop_databucket_clause

该语句用于删除databucket,每次只允许指定一个databucket删除。

# bucket_name

同alter_databucket_clause语句描述。

示例(分布式部署)

ALTER TABLESPACE SET tbs_tb DROP DATABUCKET '?/lscfile3';