人大金仓分析型数据库使用之创建和管理表空间

目录

前言

一、创建表空间

二、存储数据库对象

三、查看表空间

四、删除表空间  

五、移动临时或事务文件的位置


前言

        表空间允许数据库管理员在每台机器上拥有多个文件系统并且决定如何最好地使用物理存储来存放数据库对象。 表空间允许用户为频繁使用和不频繁使用的数据库对象分配不同的存储,或者在特定的数据库对象上控制I/O 性能。 例如,把 频繁使用的表放在使用高性能固态驱动器(SSD )的文件系统上,而把其他表放在标准的磁盘驱动器上。
         表空间需要一个主机文件系统位置来存储其数据库文件。 在 数据库中,文 件系统位置必须存在于包括运行master、master standby和每个primary mirror 的所有主机上。 表空间是 数据库系统对象(全局对象),如果有权限的话,可以使用任何 数据库中的表空间。

一、创建表空间

        CREATE TABLESPACE命令创建一个表空间。例如:

CREATE TABLESPACE fastspace LOCATION '/fastdisk/mpp';

        数据库超级用户定义表空间并通过GRANT CREATE 命令赋予数据库用户访问权限。 例如:

GRANT CREATE ON TABLESPACE fastspace TO admin;

二、存储数据库对象

        在一个表空间上拥有CREATE特权的用户可以在其中创建数据库对象,例如表、索引和数据库。命令是:

CREATE TABLE tablename(options) TABLESPACE spacename;

         例如,下列命令在表空间space1中创建一个表:

CREATE TABLE foo(i int) TABLESPACE space1;

        用户也可以使用default_tablespace参数为没有指定表空间的 CREATE TABLECREATE INDEX命令指定默认表空间:

SET default_tablespace = space1;
CREATE TABLE foo(i int);
        与数据库相关联的表空间存储数据库的系统目录、服务器进程使用该数据库创建的临时文件。如果在创建对象时没有指定表空间,则数据库中创建的表和索引选择此表空间为默认表空间。如果在创建数据库时没有指定表空间,则使用与该数据库模板库一样的表空间。如果有足够的权限的话,可以使用任何数据库的表空间。

三、查看表空间

        每个数据库系统有如下默认表空间:

  • pg_global 用于共享系统的catalogs
  • pg_default,默认表空间。由template1template0数据库使用

这些表空间使用系统的默认文件空间,其数据目录位置在系统初始化时被创建。 

        要查看表空间信息,请从pg_tablespace表获取表空间的对象ID(OID),然后使用gp_tablespace_location()函数显示表空间路径。 下面是一个包含有一 个用户定义的表空间myspace的例子:

SELECT oid, * FROM pg_tablespace ;
oid | spcname | spcowner | spcacl | spcoptions
-------+------------+----------+--------+------------
1663 | pg_default | 10 | |
1664 | pg_global | 10 | |
16391 | myspace | 10 | |
(3 rows)
myspace 表空间的 OID 16391 。 运行 gp_tablespace_location() 显示了系统中包含两个节点和master 的表空间位置。
# SELECT * FROM gp_tablespace_location(16391);
gp_segment_id | tblspc_loc
---------------+------------------
0 | /data/mytblspace
1 | /data/mytblspace
-1 | /data/mytblspace
(3 rows)
这个查询使用 gp_tablespace_location() catalog gp_segment_configuration显示包含myspace 表空间文件系统路径的节点实例信息。
WITH spc AS (SELECT * FROM gp_tablespace_location(16391))
SELECT seg.role, spc.gp_segment_id as seg_id, seg.hostname, seg.datadir, tblspc_loc
FROM spc, gp_segment_configuration AS seg
WHERE spc.gp_segment_id = seg.content ORDER BY seg_id;

四、删除表空间  

        要删除表空间,必须是表空间的所有者或者超级用户。直到所有依赖该表空间的对象都被删除才可以删除该表空间。DROP TABLESPACE命令删除一个空的表空间。无法删除一个非空或存储了临时或事务文件的表空间。

五、移动临时或事务文件的位置

        可以将临时文件或事务文件移动到特定的表空间,以在运行查询,创建备份和更顺序地存储数据时提高数据库性能。数据库服务器配置参数 temp_tablespaces 控制哈希聚合和哈希连接查询的临时表和临时溢出文件的位置(用于排序大型数据集等目的的临时文件与<data_dir>/<seg_ID>/base/pgsql_tmp中的常规段数据一起存储)。CREATE命令没有显式指定表空间时, temp_tablespaces指定了创建临时对象时使用的表空间(临时表和临时表上的index)。

        另请注意有关临时文件或事务文件的以下信息:

  • 尽管可以使用相同的表空间来存储其他类型的文件,但只能将一个表空间专用于临时文件或事务文件
  • 无法删除一个被临时文件使用的表空间

你可能感兴趣的:(数据库)