其他分享
首页 > 其他分享> > KingbaseES的表空间

KingbaseES的表空间

作者:互联网

列出现有的表空间:

test=# \db
表空间列表
名称 | 拥有者 | 所在地
-------------+--------+----------------------
sys_default | system |
sys_global | system |
sysaudit | system |
(3 行记录)

test=# select oid,* from sys_tablespace;
oid | oid | spcname | spcowner | spcacl | spcoptions
------+------+-------------+----------+--------+------------
1663 | 1663 | sys_default | 10 | |
1664 | 1664 | sys_global | 10 | |
1986 | 1986 | sysaudit | 10 | |
(3 行记录)

示例如下:

test=# CREATE TABLESPACE tsp01 OWNER system LOCATION '/opt/Kingbase/ES/V8/mytbs';
CREATE TABLESPACE

目录"/opt/Kingbase/ES/V8/mytbs "必须是一个已有的空目录,并且属于数据库的操作系统用户

示例用户"tuser":为普通用户

test=# \c test tuser
You are now connected to database "test" as user "tuser".
test=> create table test_tsp(id int) tablespace tsp01;
ERROR: permission denied for tablespace tsp01
test=> \c test system
You are now connected to database "test" as user "system".
test=# GRANT CREATE ON TABLESPACE tsp01 TO tuser;
GRANT
test=# \c test tuser
You are now connected to database "test" as user "tuser".
test=> create table test_tsp(id int) tablespace tsp01;
CREATE TABLE

语法:

ALTER DATABASE name SET TABLESPACE new_tablespace

以数据库test为例:

ALTER DATABASE test SET TABLESPACE tsp01;

注意1:不能对自己连接的数据库操作。如:以下连接着test,再对test 进行操作。

test=# ALTER DATABASE test SET TABLESPACE tsp01;
ERROR: cannot change the tablespace of the currently open database

注意2:执行该操作;新的表空间内不能有对象存在。如:数据库test 已有部分对象已在tsp01,则以下操作失败。

test1=# ALTER DATABASE test SET TABLESPACE tsp01;
ERROR: some relations of database "test" are already in tablespace "tsp01"
HINT: You must move them back to the database's default tablespace before using this command.

注意3:不能对已有连接的数据库进行操作。如:test 已有连接,则以下操作失败。

test1=# ALTER DATABASE test SET TABLESPACE tsp01;
ERROR: database "test" is being accessed by other users
DETAIL: There is 1 other session using the database.

断开其他连接后:

test1=# ALTER DATABASE test SET TABLESPACE tsp01;
ALTER DATABASE

查看数据库默认表空间:

test=# select d.datname,p.spcname from sys_database d, sys_tablespace p where d.datname='test' and p.oid = d.dattablespace;
datname | spcname
---------+---------
test | tsp01
(1 row)

KingbaseES的临时表空间,通过参数temp_tablespaces进行配置,KingbaseES允许用户配置多个临时表空间,配置多个临时表空间时,使用逗号隔开。
如果没有配置temp_tablespaces 参数,临时表空间对应的是默认的表空间sys_default。
KingbaseES的临时表空间用来存储临时表或临时表的索引,以及执行SQL时可能产生的临时文件例如排序,聚合,哈希等。
为了提高性能,一般建议将临时表空间放在SSD或者IOPS,以及吞吐量较高的分区中。

创建临时表空间

$ mkdir -p /opt/Kingbase/ES/V8/mytemptbs
$ chown -R kingbase: kingbase /opt/Kingbase/ES/V8/mytemptbs
ksql -U system -d test
test=# CREATE TABLESPACE temp01 LOCATION '/opt/Kingbase/ES/V8/mytemptbs';
CREATE TABLESPACE
test=# show temp_tablespaces ;
temp_tablespaces
+---------

(1 row)

设置临时表空间
会话级生效

test=# set temp_tablespaces = 'temp01';
SET

永久生效
修改参数文件kingbase.conf
重载配置

[kingbase@singlekbdb data]$ grep "temp_tablespace" kingbase.conf
temp_tablespaces = 'temp01' # a list of tablespace names, '' uses

查看临时表空间

test=# show temp_tablespaces ;
temp_tablespaces
+---------
temp01
(1 row)

KingbaseES为DBA用户提供了一个GUC参数skip_tablespace_check,该参数开启后DBA用户可以访问只读表空间对象、甚至是离线表空间对象。
注意:现阶段skip_tablespace_check参数默认开启,如需要使用表空间只读、离线功能,请关闭该参数。

test=# ALTER TABLESPACE tsp01 offline;
警告: tablespace mode switch from ONLINE READWRITE to OFFLINE READWRITE!
ALTER TABLESPACE
test=# ALTER TABLESPACE tsp01 online;
警告: tablespace mode switch from OFFLINE READWRITE to ONLINE READWRITE!
ALTER TABLESPACE
test=# ALTER TABLESPACE tsp01 READ ONLY;
警告: tablespace mode switch from ONLINE READWRITE to ONLINE READONLY!
ALTER TABLESPACE
test=# ALTER TABLESPACE tsp01 READ write;
警告: tablespace mode switch from ONLINE READONLY to ONLINE READWRITE!
ALTER TABLESPACE

另一种语法:

ALTER TABLESPACE tsp01 SET (READONLY_mode = TRUE); 只读
ALTER TABLESPACE tsp01 SET (READONLY_mode = FALSE); 读写
ALTER TABLESPACE tsp01 SET (online_mode = true); 在线
ALTER TABLESPACE tsp01 SET (online_mode = false); 离线

标签:tsp01,test,tablespace,空间,TABLESPACE,KingbaseES,ALTER
来源: https://www.cnblogs.com/kingbase/p/16057595.html