Greenplum创建和管理表空间(Tablespace)
目录
一、概述
表空间(Tablespace)允许数据库管理员在每个机器上使用多个文件系统(FileSystem),决定如何更好地使用物理存储空间来存储数据库对象。表空间被命名为在文件空间(Filespace)里的位置,在文件空间里可以创建对象。表空间允许你为使用频繁和使用不频繁的数据库对象分配不同的存储空间,或者控制具体的数据库对象的I/O性能。比如,将一张频繁使用的表放在使用高性能固态硬盘(SSD,solid-state driver)上的文件系统上。
一个表空间需要一个文件系统的位置来存储数据库文件,在greenplum数据库中,master和segment需要不同的存储位置。greenplum中所有组件的文件系统位置的集合称之为文件空间,文件空间可以被一个或者多个表空间使用。
二、使用gpfilespace创建文件空间
1.使用gpadmin用户在master节点上登录
$ su gpadmin
2.创建一个文件空间配置文件
$ gpfilespace -O gpfilespace_config
3.上述命令会提示你需要输入,输入文件空间的名字,primary segment在文件系统的位置,mirror segment在文件系统上的位置,以及master在文件系统上的位置。primary segment和mirror segment的位置要参照segment节点上创建的目录,master的位置要参照master节点和standby master节点上创建的目录。比如,在一台机器上配置了两个primary segment和两个mirror segment,具体的输入可参考下面:
Enter a name for this filespace> myfilespace
primary location 1> /home/gpadmin/gpdata/gpdatap1
primary location 2> /home/gpadmin/gpdata/gpdatap2
mirror location 1> /home/gpadmin/gpdata/gpdatam1
mirror location 2> /home/gpadmin/gpdata/gpdatam2
master location> /home/gpadmin/gpdata/gpmaster
4.gpfilespace会创建一个配置文件,检查配置文件确认其是否正确
5.再次运行filespace,基于配置文件创建文件空间
$ gpfilespace -c gpfilespace_config
三、创建表空间(Tablespace)
在创建文件空间之后,可以使用CREATE TABLESPACE命令在文件空间上定义一个表空间,比如:
=# CREATE TABLESPACE myspace FILESPACE myfilespace;
超级用户(gpadmin)定义一个表空间,使用GRANT CREATE命令授权给普通的数据库用户,比如:
=# GRANT CREATE ON TABLESPACE myspace TO admin;
四、使用表空间存储数据库对象
对于在某个表空空间上具有CREATE权限的用户,可以在该表空间上创建数据库对象,比如表、索引和数据库。具体命令如下:
CREATE TABLE foo(i int) TABLESPACE myspace;
可以为CREATE TABLE 和CREATE INDEX命令设定默认的表空间,这样就可以不指定具体的表空空间了,比如:
SET default_tablespace = myspace;
CREATE TABLE foo(i int);
注意:当创建数据库时没有具体指定表空间,数据库会使用与模板数据库(template database)相同的表空间。
五、查看创建的表空间和文件空间
每一个Greenplum数据库都有以下默认的表空间
*** pg_global:共享的系统目录
*** pg_default:默认的表空间,被template1和template0使用
上述的表空间使用默认的系统表空间,pg_system。数据存储的目录是在系统初始化的时候被创建。
查看文件空间的信息,需要查看pg_filespace和pg_filespace_entry目录表。将其与pg_tablespace进行join连接,可以查看表空间的全部定义信息。比如:
=# SELECT spcname as tblspc, fsname as filespc,
fsedbid as seg_dbid, fselocation as datadir
FROM pg_tablespace pgts, pg_filespace pgfs,
pg_filespace_entry pgfse
WHERE pgts.spcfsoid=pgfse.fsefsoid
AND pgfse.fsefsoid=pgfs.oid
ORDER BY tblspc, seg_dbid;
六、删除表空间和文件空间
删除表空间和文件空间,要求用户是该表空间的属主或者用户为超级用户,仅仅只有超级用户才可以删除文件空间。
使用DROP TABLESPACE tablespacename 命令删除一个空的表空间
DROP TABLESPACE mytablespace
使用DROP FILESPACE filespacename 删除一个空的文件空间
DROP FILESPACE myfilespace