6.6.?表空间

UXDB中的表空间允许数据库管理员在文件系统中定义用来存放表示数据库对象的文件的位置。一旦被创建,表空间可以在创建数据库对象时通过名称引用。

通过使用表空间,管理员可以控制一个UXDB安装的磁盘布局。这么做至少有两个好处:首先,如果初始化集群所在的分区或者卷用光空间,而又不能扩展,那么表空间可以在一个不同的分区上创建和使用,直到系统可以重新配置。

其次,表空间允许管理员根据数据库对象的使用模式安排数据位置,从而优化性能。例如,一个很频繁使用的索引可以放在非常快并且非常可靠的磁盘上,例如一种非常贵的固态设备。同时,一个存储归档的数据,很少使用的或者对性能要求不高的表可以存储在一个便宜且比较慢的磁盘系统上。

警告

即便是位于主要的UXDB数据目录之外,表空间也是数据库集群的一部分 并且不能被视作数据文件的一个自治集合。 它们依赖于包含在主数据目录中的元数据,并且因此不能被附加到一个 不同的数据库集群或者单独备份。类似地,如果丢失一个表空间(文件删除、磁盘失效等), 数据库集群可能会变成不可读或者无法启动。把一个表空间放在一个临时文件系统 (如一个内存虚拟盘)上会带来整个集群的可靠性风险。

要定义一个表空间,使用CREATE TABLESPACE命令,例如:

CREATE TABLESPACE fastspace LOCATION '/ssd1/uxdb/data';        (本地存储表空间)
CREATE TABLESPACE fastspace LOCATION 'tbspace';			  (分布式存储表空间)

这个位置必须是一个已有的空目录,并且属于UXDB操作系统用户。 所有后续在该表空间中创建的对象都将被存放在这个目录下的文件中。该位置不能放在可移动 或者瞬时存储上,因为如果表空间丢失会导致集群无法工作。

注意

通常在一个逻辑文件系统上建立多个表空间没有什么意义,因为无法控制一个逻辑文件系统里不同文件的位置。不过,UXDB并不做这方面的任何强制,并且它实际上并不知道文件系统边界。它只知道在指定的目录里存储文件。

创建表空间本身必须用数据库超级用户身份进行,之后可以允许普通数据库用户来使用。要做这件事情,需要在表空间上给这些用户授予CREATE权限。

表、索引和整个数据库都可以被分配到特定的表空间。有 CREATE权限的用户在给定表空间上创建数据库或数据库对象时,必须把表空间名以一个参数的形式传递给相关的命令。例如,在表空间space1中创建一个表:

CREATE TABLE foo(i int) TABLESPACE space1;

另外,还可以使用default_tablespace参数:

SET default_tablespace = space1;
CREATE TABLE foo(i int);

default_tablespace被设置为非空字符串,那么它就为没有显式TABLESPACE子句的CREATE TABLECREATE INDEX命令提供一个隐式TABLESPACE子句。

也有一个temp_tablespaces参数,决定临时表和索引的放置,类似于存储大数据集这样的目的临时文件。这可能是一个表空间名称的列表,而不是只有一个名称,所以与临时对象相关联的负载可以散布到多个表空间中。每次创建临时对象时选择一个随机的成员列表。

一个数据库的系统表存储在与该数据库相关联的表空间。另外,如果没有给出TABLESPACE子句,并且没有在default_tablespacetemp_tablespaces指定其他选项,那么在数据库中创建表、索引和临时文件时使用的是默认表空间。如果创建数据库时没有给它一个表空间,那么它使用与它拷贝的模版数据库相同的表空间。

当初始化数据库集群时,会自动创建两个表空间。ux_global表空间被用于共享系统目录。ux_default表空间是template1template0数据库的默认表空间(因此也将是所有其他数据库的默认表空间,除非被CREATE DATABASE中的TABLESPACE子句覆盖)。

表空间一旦被创建,可以被任何数据库使用,前提是请求的用户具有足够的权限。这也意味着,一个表空间只有在所有使用它的数据库中所有对象都被删除掉之后才可以被删掉。

要删除一个空的表空间,使用DROP TABLESPACE命令。

要确定现有表空间的集合,可检查ux_tablespace系统目录,例如

SELECT spcname FROM ux_tablespace;

uxsql程序的\db元命令也可以用来列出现有的表空间。

UXDB使用符号连接来简化表空间的实现,所以表空间只能在支持符号连接的系统上使用。

目录$UXDATA/ux_tblspc包含指向集群里定义的每个非内置表空间的符号连接。尽管澳门游戏平台注册网站不建议,但是澳门游戏平台注册网站还是可以通过手动重定义这些连接来调整表空间的布局。在服务器运行时,绝对不要这样做。

XML 地图 | Sitemap 地图