金仓数据库KingbaseES表空间介绍
1、表空间的概念
KingbaseES中的表空间允许在文件系统中定义用来存放表示数据库对象的文件的位置。在KingbaseES中表空间实际上就是给表指定一个存储目录。
2、表空间的作用
通过使用表空间,管理员可以控制一个KingbaseES安装的磁盘布局。
- 如果初始化集簇所在的分区或者卷用光了空间,而又不能在逻辑上扩展或者做别的什么操作,那么表空间可以被创建在一个不同的分区上,直到系统可以被重新配置。
- 表空间允许管理员根据数据库对象的使用模式来优化性能。例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。
用一句话来讲:能合理利用磁盘性能和空间,制定最优的物理存储方式来管理数据库表和索引。
3、表空间跟数据库的关系
- 在Oracle数据库中;一个表空间只属于一个数据库使用;而一个数据库可以拥有多个表空间。属于"一对多"的关系
- 在KingbaseES集群中;一个表空间可以让多个数据库使用;而一个数据库可以使用多个表空间。属于"多对多"的关系。
4、系统默认表空间
表空间sys_default是用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应存储目录$KINGBASE_HOME/data/base/
表空间sys_global用来存放系统字典表;对应存储目录$KINGBASE_HOME/data /global/
列出现有的表空间:
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、创建表空间
语法:
CREATE TABLESPACE tablespace_name[ OWNER { new_owner | CURRENT_USER | SESSION_USER } ]LOCATION 'directory'[ ONLINE | OFFLINE ][ WITH ( tablespace_option = value [, ... ] ) ]
C5023版本也可支持oracle的语法(未设计功能,只做语法兼容):
CREATE [ SMALLFILE ] TABLESPACE tablespace_name[ DATAFILE file_specification [ , file_specification ...]
其中 file_specification 是:
{[ '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}]}
示例如下:
test=# CREATE TABLESPACE tsp01 OWNER system LOCATION '/opt/Kingbase/ES/V8/mytbs';CREATE TABLESPACE
目录"/opt/Kingbase/ES/V8/mytbs "必须是一个已有的空目录,并且属于KingbaseES操作系统用户
兼容Oracle语法:(V008R006C005B0023版本)
test=# CREATE TABLESPACE tsp01 LOCATION '/home/kbc5/mytbs' ONLINE;CREATE TABLESPACE
6、权限分配
表空间的创建本身必须作为一个数据库超级用户完成,但在创建完之后之后你可以允许普通数据库用户来使用它.要这样做,给数据库普通用户授予表空间上的CREATE权限。表、索引和整个数据库都可以被分配到特定的表空间.
示例用户"tuser":为普通用户。
test=# \c test tuserYou are now connected to database "test" as user "tuser".test=> create table test_tsp(id int) tablespace tsp01;ERROR: permission denied for tablespace tsp01test=> \c test systemYou are now connected to database "test" as user "system".test=# GRANT CREATE ON TABLESPACE tsp01 TO tuser;GRANTtest=# \c test tuserYou 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:执行该操作;不能连着对应数据库操作
test=# ALTER DATABASE test SET TABLESPACE tsp01;ERROR: cannot change the tablespace of the currently open database
注意2:执行该操作;新的表空间内不能有对象存在
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:执行该操作;必须是没有人连着对应的数据库
test1=# ALTER DATABASE test SET TABLESPACE tsp01;ERROR: database "test" is being accessed by other usersDETAIL: 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)
8、临时表空间
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/mytemptbstest=# CREATE TABLESPACE temp01 LOCATION '/opt/Kingbase/ES/V8/mytemptbs';CREATE TABLESPACEtest=# show temp_tablespaces ;temp_tablespaces------------------(1 row)
设置临时表空间
会话级生效
test=# set temp_tablespaces = 'temp01';SET
永久生效
修改参数文件kingbase.conf
重载配置
[kingbase@singlekbdb data]$ grep "temp_tablespace" kingbase.conftemp_tablespaces = 'temp01' # a list of tablespace names, '' uses
查看临时表空间
test=# show temp_tablespaces ;temp_tablespaces------------------temp01(1 row)
金仓数据库KingbaseES表空间介绍相关推荐
- 金仓数据库KingbaseES表空间(tablespace)知多少
金仓数据库KingbaseES表空间定义 金仓数据库KingbaseES中的表空间允许在文件系统里定义那些代表数据库对象的文件存放位置,比如表和索引等.一旦表空间被创建,那么就可以在创建数据库对象时通 ...
- 金仓数据库 KingbaseES Sys_repack 解决金仓数据库 KingbaseES 表膨胀的问题
关键字 表膨胀 vacuum 索引膨胀 无锁处理 问题描述 详细描述问题现象,必要时可添加图片.表或索引发生膨胀后,用户可以使用vacuum full重建表,但是vacuum full需要持有排它锁 ...
- 金仓数据库KingbaseES—DBMS_DDL插件介绍
1. DBMS_DDL插件简介 DBMS_DDL是KingbaseES的一个扩展插件,主要用于创建一个PL/SQL包体.函数.过程. DBMS_DDL拓展插件不支持PG模式. 2. 加密函数WRAP ...
- 金仓数据库KingbaseES行列转换
概述 行列转换是在数据分析中经常用到的一项功能,金仓数据库KingbaseES从V8R6C3B0071版本开始通过扩展插件(kdb_utils_function)支持pivot和unpivot功能.在 ...
- 金仓数据库KingbaseES模式的使用
关键字 Kingbase.模式 正文 金仓数据库KingbaseES模式使用注意事项: 多个用户使用同一个数据库而不会相互影响: 对数据库中的对象进行逻辑分组,更便于管理: 各个应用分别使用各自的 ...
- 解决金仓数据库KingbaseES创建serial列并将其设置为主键约束,同时copy两条及以上数据时报错的问题
关键字 人大金仓.金仓数据库.KingbaseES.KES.serial.copy.PRIMARY KEY 问题描述 使用KingbaseES V8R3数据库的客户端工具ksql执行copy - ...
- 如何在金仓数据库KingbaseES中使用pg_get_function_arg_default函数
关键字 pg_get_function_arg_default,regproc 问题描述 如何在金仓数据库KingbaseES中使用pg_get_function_arg_default函数获取函数或 ...
- 金仓数据库KingbaseES序列的操作
关键字 kingbase,序列 问题描述 如何操作金仓数据库KingbaseES序列? 解决方案 1.创建一个新的序列数发生器. 创建一个称作serial的上升序列,从 101 开始: CREATE ...
- 金仓数据库KingbaseES函数的管理
关键字 kingbase,函数 问题描述 如何管理金仓数据库KingbaseES函数? 解决方案 a.创建一个函数 create or repalce function CREATE FUNCTION ...
最新文章
- (C++)1029 旧键盘
- C++、嵌入式软开之指针
- SQL 中left join ,inner join,right join的区别
- 深度学习框架不能“包治百病”,开发者如何选出最适合自己的?
- win10英伟达NVIDIA无法登录
- 打开程序并监听程序是否退出
- [洛谷P4234]最小差值生成树
- 中文信息处理(二)—— 分词
- EQ一卡通踩过的坑,解决加载不到动态库,输出数据到led屏乱码问题
- 使用iMazing给苹果手机设置专属来电铃声
- HTML图片映射矩形坐标,HTML图片热区map area的用法(转载)
- 腾讯47岁T13大佬被裁,厂龄15年依然被毕业?
- SharePoint Keyword Query Languge(KQL)语法
- 【查找】临近省赛,Alan邀请emoji玩起了猜数字游戏活跃一下大脑。游戏规则如下:首先Alan写下几个数字让emoji猜,当emoji猜完之后,Alan会给他一个提示(java)
- MyBatis动态SQL之<foreach>用法
- C语言中+=的含义你明白吗?
- HP EVA系列存储raid结构原理研究
- 沟通之痛:如何改变?
- 网易有道笔试归来感想!
- 服务器100M带宽视频流媒体支持多少用户在线访问?(计算一下就知道了)