暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

华为GaussDB T 管理表空间

墨天轮 2019-10-12
2285

管理表空间

GaussDB 100里数据库管理员(DBA,Database Administrator)通过表空间定义数据库对象文件的存放位置。管理员创建表空间后,可以在创建数据库对象的时候引用它。

相关概念

GaussDB 100数据库的表空间是由一个或者多个数据文件组成。数据库中所有对象在逻辑上都存放在表空间中,在物理上储存在表空间所属的数据文件中。

Schema是数据库对象的集合, 一个schema可以存在于多个表空间,一个表空间里也可以有多个schema。默认情况下,一个用户对应一个Schema,在创建用户时,数据库会为这个用户创建一个同名的Schema作为该用户的缺省Schema,用于存储该用户创建的对象,因此,数据库中的Schema个数与用户个数相等。访问表时,如果没有显式指明该表的Schema名,数据库会自动在表上加上缺省的Shema名。

在创建GaussDB 100数据库时,会自动创建如下表空间:

  • SYSTEM表空间

    存放GaussDB 100的元数据。为保证数据库运行稳定,建议不要在SYSTEM表空间存放用户数据。SYSTEM表空间默认不自动扩展,如果SYSTEM表空间用满,请增加数据文件或扩展表空间。

  • TEMP表空间

    完全由GaussDB 100数据库自动维护。当用户的SQL语句需要磁盘空间来完成某个操作时,GaussDB 100数据库会从TEMP表空间分配临时段。如创建索引,无法在内存中完成的排序操作,SQL语句中间结果集以及用户创建的临时表等都会使用到TEMP表空间。

  • UNDO表空间

    存放Undo数据。当执行DML(INSERT,UPDATE和DELETE等)操作时,将执行操作之前的旧数据写入UNDO表空间。其主要作用包括事务回滚、数据库实例恢复、读一致性、闪回查询。

  • USERS表空间

    默认的用户表空间。在创建新用户且没有指定表空间时,该用户的所有信息会放入USER表空间中。

  • TEMP2

    存放NOLOGGING表数据,由GaussDB 100数据库自动维护。

  • TEMP2_UNDO

    存放NOLOGGING表的Undo数据。

通过使用表空间,DBA可以控制一个数据库安装的磁盘布局。这样有以下优点:

  • 如果初始化数据库所在的分区或者卷空间已满,又不能逻辑上扩展更多空间,可以在不同的分区上创建和使用表空间,直到系统重新配置空间。
  • 表空间允许DBA根据数据库对象的使用模式安排数据位置,从而提高性能。
    • 一个频繁使用的索引可以放在性能稳定且运算速度较快的磁盘上。
    • 一个存储归档的数据,很少使用的或者对性能要求不高的表可以存储在一个运算速度较慢的磁盘上。
  • DBA通过表空间可以指定数据占用的物理磁盘空间。当多个应用程序服务共用一个服务器时,通过使用表空间限制数据量,防止表空间占用相同分区上的其他空间。这样可以避免因为磁盘空间耗竭导致的应用服务崩溃。

创建表空间

使用CREATE TABLESPACE创建表空间时可指定EXTENTS参数,表示一个extent包含的页面数。

  • EXTENTS

一个extent里包含的页面数。

取值范围 : [8, 8192],且必须为2的整数次幂。不指定EXTENTS时,默认一个extent包含8个页面。

增大单个extent的页面数量可以提高IO性能,但如果表空间下存在小表(数据量未达到一个extent大小),会导致空间浪费。

  • 以表空间human_resource为例,一个extent包含128页,指定human_resource的数据文件为humanspace_1,数据文件大小为128M,并设置自动扩展128M,即表空间数据插满128M后自动扩展 128M。
    • 使用CREATE TABLESPACE命令创建表空间。
      CREATE TABLESPACE human_resource EXTENTS 128 DATAFILE 'humanspace_1' SIZE 128M AUTOEXTEND ON NEXT 128M;
    • 在表空间中创建对象,以创建表education为例。
      如要在表空间上创建数据库对象,必须拥有该表空间的CREATE TABLESPACE权限。
      CREATE TABLE education ( staff_id INT, higest_degree CHAR(8) NOT NULL, graduate_school VARCHAR(64), graduate_date DATETIME, education_note VARCHAR(70) ) TABLESPACE human_resource;

查看表空间

DBA可以通过视图ADM_TABLESPACES,查看所有表空间信息。

普通用户可以通过视图ADM_TABLESPACES,查看当前表空间信息。

扩展表空间

使用ALTER TABLESPACE命令修改表空间。以增加DATAFILE。
ALTER TABLESPACE human_resource ADD DATAFILE 'new_datafile' SIZE 128M;

缩小表空间

使用ALTER TABLESPACE命令缩小表空间。在RESTRICTED模式下支持收缩临时表空间和undo表空间。

若需收缩undo表空间,则必须保证事务无残留。
ALTER TABLESPACE human_resource SHRINK SPACE KEEP 200M;

修改表空间

修改表空间名称,将human_resource重命名为staff_resource。

ALTER TABLESPACE human_resource RENAME TO staff_resource;

删除表空间

使用DROP TABLESPACE命令删除表空间human_resource。
--查看表空间使用状况 SELECT * FROM ADM_TABLESPACES WHERE tablespace_name= 'HUMAN_RESOURCE'; SELECT * FROM adm_segments WHERE tablespace_name='HUMAN_RESOURCE';
--删除表education DROP TABLE education;
--清空表空间数据 PURGE TABLESPACE human_resource;
--删除表空间human_resource DROP TABLESPACE human_resource;
  • 不能删除SYSTEM、UNDO、TEMP表空间。
  • 不能删除已经被使用的表空间。
  • offline的表空间必须在数据库open模式删除。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论