KingbaseES的表空间
1、表空间的概念
KingbaseES中的表空间允许在文件系统中定义用来存放表示数据库对象的文件的位置。在KingbaseES中表空间实际上就是给表指定一个存储目录。
2、表空间的作用
通过使用表空间,管理员可以控制一个KingbaseES安装的磁盘布局。
- 如果初始化集簇所在的分区或者卷用光了空间,而又不能在逻辑上扩展或者做别的什么操作,那么表空间可以被创建在一个不同的分区上,直到系统可以被重新配置。
- 表空间允许管理员根据数据库对象的使用模式来优化性能。例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。
用一句话来讲:能合理利用磁盘性能和空间,制定最优的物理存储方式来管理数据库表和索引。
3、表空间跟数据库的关系
- 在Oracle数据库中;一个表空间只属于一个数据库使用;而一个数据库可以拥有多个表空间。属于"一对多"的关系
- 在KingbaseES集群中;一个表空间可以让多个数据库使用;而一个数据库可以使用多个表空间。属于"多对多"的关系。
4、系统默认表空间
表空间sys_default是用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应存储目录$KINGBASE_HOME/data/base/
表空间sys_global用来存放系统字典表;对应存储目录$KINGBASE_HOME/data /global/
列出现有的表空间:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 行记录) |
5、创建表空间
语法:
1 2 3 4 5 | CREATE TABLESPACE tablespace_name [ OWNER { new_owner | CURRENT_USER | SESSION_USER } ] LOCATION 'directory' [ ONLINE | OFFLINE ] [ WITH ( tablespace_option = value [, ... ] ) ] |
C5023版本也可支持oracle的语法(未设计功能,只做语法兼容):
1 2 | CREATE [ SMALLFILE ] TABLESPACE tablespace_name [ DATAFILE file_specification [ , file_specification ...] |
其中 file_specification 是:
1 2 3 4 5 6 7 8 9 10 11 | { [ 'filename' ] [ SIZE { filesize [ K | M | G | T | P | E ] } ] [ REUSE ] [ AUTOEXTEND { ON [ NEXT { filesize [ K | M | G | T | P | E ] } [ MAXSIZE { UNLIMITED | { filesize [ K | M | G | T | P | E ] } } ] | OFF } ] } |
示例如下:
1 2 3 | test=# CREATE TABLESPACE tsp01 OWNER system LOCATION '/opt/Kingbase/ES/V8/mytbs' ; CREATE TABLESPACE |
目录"/opt/Kingbase/ES/V8/mytbs "必须是一个已有的空目录,并且属于KingbaseES操作系统用户
兼容Oracle语法:(V008R006C005B0023版本)
1 2 | test=# CREATE TABLESPACE tsp01 LOCATION '/home/kbc5/mytbs' ONLINE; CREATE TABLESPACE |
6、权限分配
表空间的创建本身必须作为一个数据库超级用户完成,但在创建完之后之后你可以允许普通数据库用户来使用它.要这样做,给数据库普通用户授予表空间上的CREATE权限。表、索引和整个数据库都可以被分配到特定的表空间.
示例用户"tuser":为普通用户。
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
7、数据库设置新的默认表空间
语法:
ALTER DATABASE name SET TABLESPACE new_tablespace
以数据库test为例:
ALTER DATABASE test SET TABLESPACE tsp01;
注意1:执行该操作;不能连着对应数据库操作
1 2 | test=# ALTER DATABASE test SET TABLESPACE tsp01; ERROR: cannot change the tablespace of the currently open database |
注意2:执行该操作;新的表空间内不能有对象存在
1 2 3 | 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:执行该操作;必须是没有人连着对应的数据库
1 2 3 | 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 . |
断开其他连接后:
1 2 | test1=# ALTER DATABASE test SET TABLESPACE tsp01; ALTER DATABASE |
查看数据库默认表空间
1 2 3 4 5 | 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) |
8、临时表空间
KingbaseES的临时表空间,通过参数temp_tablespaces进行配置,KingbaseES允许用户配置多个临时表空间。配置多个临时表空间时,使用逗号隔开。如果没有配置temp_tablespaces 参数,临时表空间对应的是默认的表空间sys_default。
KingbaseES的临时表空间用来存储临时表或临时表的索引,以及执行SQL时可能产生的临时文件例如排序,聚合,哈希等。为了提高性能,一般建议将临时表空间放在SSD或者IOPS,以及吞吐量较高的分区中。
1 2 3 4 5 6 7 8 9 10 11 12 | $ mkdir -p /opt/Kingbase/ES/V8/mytemptbs $ chown -R kingbase: kingbase /opt/Kingbase/ES/V8/mytemptbs test=# CREATE TABLESPACE temp01 LOCATION '/opt/Kingbase/ES/V8/mytemptbs' ; CREATE TABLESPACE test=# show temp_tablespaces ; temp_tablespaces ------------------ (1 row) |
设置临时表空间
会话级生效
1 2 3 | 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
查看临时表空间
1 2 3 4 5 6 | test=# show temp_tablespaces ; temp_tablespaces ------------------ temp01 (1 row) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2022-01-12 KingbaseES V8R6 集群运维系列 -- 读写分离集群修改ssh端口
2022-01-12 Kingbase V8R6 集群运维系列 -- 在线删除standby节点