#用户表空间管理

关于表空间管理的详细语法描述请参考开发手册CREATE TABLESPACEALTER TABLESPACEDROP TABLESPACE

# 创建表空间

数据库管理员在接收到一个创建表空间的申请时,需要从以下方面进行考量:

  • 表空间所服务的业务属性:

    • HEAP表和TAC表采取段页式结构,挂载普通数据文件

      -- 不指定DATAFILE将默认创建一个数据文件
      CREATE TABLESPACE tablespace_name;
      
    • LSC表的稳态数据采取对象结构,需挂载数据桶

      -- LSC的表空间必须指定DATABUCKET
      CREATE TABLESPACE tablespace_name DATABUCKET 'lscfile1','lscfile2';
      
    • 对敏感数据或核心数据可定义为加密表空间

      -- 加密属性在创建表空间时确定,后续不可更改
      CREATE TABLESPACE tablespace_name DATABUCKET 'lscfile1','lscfile2' ENCRYPTION ENCRYPT;
      
    • 对极高性能要求的表空间可定义为MMS表空间,同时配置MMS_DATA_LOADERS参数确定预加载策略

      CREATE TABLESPACE tablespace_name MEMORY MAPPED;
      
  • 表空间的存储属性:

    • 确定数据文件初始值、扩展值和最大值,默认由系统自动决定

      CREATE TABLESPACE yashan1 DATAFILE 'yashan1' SIZE 4M AUTOEXTEND ON NEXT 4M MAXSIZE 1G; 
      
    • 确定extent大小,默认由系统自动决定

      CREATE TABLESPACE yashan1 DATAFILE 'yashan1' SIZE 4M AUTOEXTEND ON NEXT 4M MAXSIZE 1G EXTENT UNIFORM SIZE 64K; 
      
    • 对于MMS表空间,确定是否启用大页内存,启用大页内存的前提是操作系统配置大页内存

      -- 重启生效
      ALTER SYSTEM SET MMS_USE_LARGE_PAGES=true SCOPE=BOTH;
      

# 表空间运维

# offline与online

当某个表空间不再使用,或者不想被访问到时,可将其进行脱机:

-- 默认要求脱机的表空间中的所有数据文件均为脱机
ALTER TABLESPACE yashan OFFLINE;

-- TEMPORARY选项允许脱机的表空间中有数据文件已脱机
ALTER TABLESPACE yashan OFFLINE TEMPORARY;

-- IMMEDIATE立即脱机,存在数据风险,后续不能被online
ALTER TABLESPACE yashan OFFLINE IMMEDIATE;

通过online操作可以恢复被脱机的表空间:

ALTER TABLESPACE yashan ONLINE;

# 增删数据文件

表空间可挂载的数据文件数量和数据桶数量存在规格约束(YashanDB为64),管理员需关注该限制,避免达到上限(达到上限后将无法增加数据文件,且无法通过删除数据文件的方式释放数量)。当已达到上限仍需增加数据文件或数据桶时,通过创建新的表空间来解决。

增加数据桶时还需考虑BUCKET_RESERVED_SPACE参数,该参数用于控制数据桶占用所在磁盘的空间上限。

-- 默认由系统决定新增的数据文件的属性,临时文件需使用TEMPFILE关键字
ALTER TABLESPACE yashan ADD DATAFILE;

ALTER TABLESPACE yashan DROP DATAFILE 'yashan1';

ALTER TABLESPACE lsc_tb ADD DATABUCKET 'lscfile3','lscfile4';

ALTER TABLESPACE lsc_tb DROP DATABUCKET 'lscfile3';

Caution:

对于MMS表空间,删除数据文件后内存资源不会立即释放,如需释放资源需重启数据库。生产环境中,应避免频繁地创建和删除MMS表空间,否则可能导致内存膨胀。

# 空闲空间回收

对单机部署和分布式部署中的表空间进行收缩,可以回收其空闲空间,供其他表空间使用。

示例(单机、分布式部署)

-- 不指定KEEP时,系统将最大化收缩表空间
ALTER TABLESPACE SYSTEM SHRINK SPACE KEEP 100M;
ALTER TABLESPACE SYSTEM SHRINK SPACE;

# 分布式表空间故障恢复

分布式部署中执行表空间DDL时出现节点故障,YashanDB提供自动恢复功能。

-- 为确认系统是否正常,可通过在CN执行命令查询DV$TABLESPACE,DV$DATAFILE,DV$DATABUCKET视图获取节点tablespace和datafile,bucketfile文件状态
SELECT * FROM DV$TABLESPACE WHERE name = UPPER('tablespace名称') ORDER BY group_id;
SELECT * FROM DV$DATAFILE WHERE name LIKE '%datafile名称' ORDER BY group_id;
SELECT * FROM DV$DATABUCKET WHERE url LIKE '%bucketfile名称' ORDER BY group_id;

Datafile,Bucketfile文件目录

  1. Datafile 文件默认目录: ${YASDB_DATA}/节点名/dbfiles/
  2. Bucketfile 文件默认目录: ${YASDB_DATA}/节点名/local_fs/
  3. 如果指定了目录路径,文件目录: ${YASDB_DATA}/节点名/指定目录/

CREATE TABLESPACE

创建表空间时出现节点故障,具体情况和解决方案如下所示:

  • 仅在MN节点(group_id为1)有Tablespace和Datafile或Databucket记录,DV$PUB_STAT视图没有异常Tablespace相关DDL记录,发现仅有MN节点出现故障:

    1. 需重启MN节点并手动在CN节点上执行如下语句:

      DROP TABLESPACE IF EXISTS tablespace_name including contents AND datafiles;
      
    2. 查询DV$TABLESPACEDV$DATAFILEDV$DATABUCKET视图,确认没有对应的Tablespace。

    3. 查询MN节点下的Datafile和Databucket文件夹,确认没有对应的Tablespace文件残留,若有则需手动清除该文件夹。

    4. 重启后,再次执行 CREATE TABLESPACE 命令即可。

  • MN节点,部分CN/DN节点有Tablespace和Datafile或Databucket记录,MN节点中DV$PUB_STAT视图有异常Tablespace相关DDL推送记录,发现有部分CN/DN节点出现故障:

    1. 重启故障节点,等待片刻后于MN节点中查询DV$PUB_STAT视图,如没有发现异常Tablespace相关的DDL记录,则表示恢复成功;如仍查询到异常DDL记录,可通过ERR_MSG字段查看失败原因:若显示DN资源不足,则需要重新合理分配资源。
  • 所有节点都没有Tablespace和Datafile或Databucket记录,MN节点中DV$PUB_STAT视图没有异常Tablespace相关DDL记录,发现仅有MN节点出现故障:

    1. 重启MN节点,再次执行 CREATE TABLESPACE 命令即可。

DROP TABLESPACE

删除表空间时出现节点故障,具体情况和解决方案如下所示:

  • MN节点有Tablespace和Datafile或Databucket记录,仅有MN节点出现故障:

    1. 重启MN节点,并手动在CN节点上执行如下语句:

      DROP TABLESPACE IF EXISTS tablespace_name including contents AND datafiles;
      
  • MN节点不存在Tablespace,CN/DN节点有Tablespace和Datafile或Databucket记录,部分CN/DN节点出现故障:

    1. 重启故障节点即可恢复。

ALTER TABLESPACE ADD(DATAFILE|TEMPFILE)

修改表空间数据文件时出现节点故障,具体情况和解决方案如下所示:

  • 仅在MN节点(group_id为1)有Tablespace和Datafile或Databucket记录,DV$PUB_STAT视图没有异常Tablespace相关DDL记录,发现仅有MN节点出现故障:

    1. 需重启MN节点并手动在CN节点上执行如下语句:

      ALTER TABLESPACE yashan DROP DATAFILE datafile_name;
      
    2. 查询DV$TABLESPACEDV$DATAFILEDV$DATABUCKET视图,确认没有对应的Tablespace。

    3. 查询MN节点下的Datafile和Databucket文件夹,确认没有对应的Tablespace文件残留,若有则需手动清除该文件夹。

    4. 重启后,再次执行 ALTER TABLESPACE ADD(DATAFILE|TEMPFILE) 命令即可。

  • MN节点,部分CN/DN节点有Tablespace和Datafile或Databucket记录,MN节点中DV$PUB_STAT视图有异常Tablespace相关DDL推送记录,发现有部分CN/DN节点出现故障:

    1. 重启故障节点,等待片刻后于MN节点中查询DV$PUB_STAT视图,如没有发现异常Tablespace相关的DDL记录,则表示恢复成功;如仍查询到异常DDL记录,可通过ERR_MSG字段查看失败原因:若显示DN资源不足,则需要重新合理分配资源。
  • 所有节点都没有Tablespace和Datafile或Databucket记录,MN节点中DV$PUB_STAT视图没有异常Tablespace相关DDL记录,发现仅有MN节点出现故障:

    1. 重启MN节点,再次执行 ALTER TABLESPACE ADD(DATAFILE|TEMPFILE) 命令即可。