[转帖]金仓数据库KingbaseES表空间介绍

数据库,kingbasees,空间,介绍 · 浏览次数 : 0

小编点评

**表、索引和整个数据库都可以被分配到特定的表空间。** **注意1:执行该操作;不能连着对应数据库操作 test=# ALTER DATABASE test SET TABLESPACE tsp01; ERROR:  cannot change the tablespace of the currently open database** **注意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. 断开其他连接后: 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,以及吞吐量较高的分区中。

正文

1、表空间的概念

KingbaseES中的表空间允许在文件系统中定义用来存放表示数据库对象的文件的位置。在KingbaseES中表空间实际上就是给表指定一个存储目录。

2、表空间的作用

通过使用表空间,管理员可以控制一个KingbaseES安装的磁盘布局。

  • 如果初始化集簇所在的分区或者卷用光了空间,而又不能在逻辑上扩展或者做别的什么操作,那么表空间可以被创建在一个不同的分区上,直到系统可以被重新配置。
  • 表空间允许管理员根据数据库对象的使用模式来优化性能。例如,一个很频繁使用的索引可以被放在非常快并且非常可靠的磁盘上,如一种非常贵的固态设备。同时,一个很少使用的或者对性能要求不高的存储归档数据的表可以存储在一个便宜但比较慢的磁盘系统上。

用一句话来讲:能合理利用磁盘性能和空间,制定最优的物理存储方式来管理数据库表和索引。

3、表空间跟数据库的关系

  • 在Oracle数据库中;一个表空间只属于一个数据库使用;而一个数据库可以拥有多个表空间。属于"一对多"的关系
  • 在KingbaseES集群中;一个表空间可以让多个数据库使用;而一个数据库可以使用多个表空间。属于"多对多"的关系。

4、系统默认表空间

表空间sys_default是用来存储系统目录对象、用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应存储目录$KINGBASE_HOME/data/base/

表空间sys_global用来存放系统字典表;对应存储目录$KINGBASE_HOME/data /global/

列出现有的表空间:

  1. test=# \db
  2.           表空间列表
  3.     名称     | 拥有者 | 所在地
  4. -------------+--------+--------
  5.  sys_default | system |
  6.  sys_global  | system |
  7.  sysaudit    | system |
  8. (3 行记录)
  9. test=select oid,* from sys_tablespace;
  10.  oid  | oid  |   spcname   | spcowner | spcacl | spcoptions
  11. ------+------+-------------+----------+--------+------------
  12.  1663 | 1663 | sys_default |       10 |        |
  13.  1664 | 1664 | sys_global  |       10 |        |
  14.  1986 | 1986 | sysaudit    |       10 |        |
  15. (3 行记录)

5、创建表空间

语法:

  1. CREATE TABLESPACE tablespace_name
  2. [ OWNER { new_owner | CURRENT_USER | SESSION_USER } ]
  3. LOCATION 'directory'
  4. [ ONLINE | OFFLINE ]
  5. WITH ( tablespace_option = value [, ... ] ) ]

C5023版本也可支持oracle的语法(未设计功能,只做语法兼容):  

  1. CREATE [ SMALLFILE ] TABLESPACE tablespace_name
  2.     [ DATAFILE  file_specification [ , file_specification ...]

其中 file_specification 是:

  1. {
  2.   [ 'filename' ]
  3.   [ SIZE  { filesize [ K | M | G | T | P | E ] } ]
  4.   [ REUSE ]
  5.   [ AUTOEXTEND  { ON [ NEXT { filesize [ K | M | G | T | P | E ] }
  6.                       [ MAXSIZE { UNLIMITED | { filesize [ K | M | G | T |
  7.                       P | E ] } } ]
  8.                   | OFF
  9.                 }
  10.   ]
  11. }

示例如下:

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

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

 兼容Oracle语法:(V008R006C005B0023版本)

  1. test=# CREATE TABLESPACE tsp01 LOCATION '/home/kbc5/mytbs' ONLINE;
  2. CREATE TABLESPACE

6、权限分配

表空间的创建本身必须作为一个数据库超级用户完成,但在创建完之后之后你可以允许普通数据库用户来使用它.要这样做,给数据库普通用户授予表空间上的CREATE权限。表、索引和整个数据库都可以被分配到特定的表空间.

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

  1. test=# \c test tuser
  2. You are now connected to database "test" as user "tuser".
  3. test=> create table test_tsp(id int) tablespace tsp01;
  4. ERROR:  permission denied for tablespace tsp01
  5. test=> \c test system
  6. You are now connected to database "test" as user "system".
  7. test=# GRANT CREATE ON TABLESPACE tsp01 TO tuser;
  8. GRANT
  9. test=# \c test tuser
  10. You are now connected to database "test" as user "tuser".
  11. test=> create table test_tsp(id int) tablespace tsp01;
  12. CREATE TABLE

7、数据库设置新的默认表空间

语法:

ALTER DATABASE name SET TABLESPACE new_tablespace

以数据库test为例:

ALTER DATABASE test SET TABLESPACE tsp01;

注意1:执行该操作;不能连着对应数据库操作

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

注意2:执行该操作;新的表空间内不能有对象存在

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

注意3:执行该操作;必须是没有人连着对应的数据库

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

断开其他连接后:

  1. test1=# ALTER DATABASE test SET TABLESPACE tsp01;
  2. 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,以及吞吐量较高的分区中。

  1. $ mkdir -p /opt/Kingbase/ES/V8/mytemptbs
  2. $ chown -R kingbase: kingbase /opt/Kingbase/ES/V8/mytemptbs
  3. test=# CREATE TABLESPACE temp01 LOCATION '/opt/Kingbase/ES/V8/mytemptbs';
  4. CREATE TABLESPACE
  5. test=# show temp_tablespaces ;
  6.  temp_tablespaces
  7. ------------------
  8. (1 row)

设置临时表空间

会话级生效

  1. test=set temp_tablespaces = 'temp01';
  2. SET

永久生效

修改参数文件kingbase.conf

重载配置

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

查看临时表空间

  1. test=# show temp_tablespaces ;
  2.  temp_tablespaces
  3. ------------------
  4.  temp01
  5. (1 row)

文章知识点与官方知识档案匹配,可进一步学习相关知识
MySQL入门技能树首页概览59714 人正在系统学习中

与[转帖]金仓数据库KingbaseES表空间介绍 相似的内容:

[转帖]金仓数据库KingbaseES表空间介绍

1、表空间的概念 KingbaseES中的表空间允许在文件系统中定义用来存放表示数据库对象的文件的位置。在KingbaseES中表空间实际上就是给表指定一个存储目录。 2、表空间的作用 通过使用表空间,管理员可以控制一个KingbaseES安装的磁盘布局。 如果初始化集簇所在的分区或者卷用光了空间,

[转帖]金仓数据库KingbaseES表空间(tablespace)知多少

金仓数据库KingbaseES表空间定义 金仓数据库KingbaseES中的表空间允许在文件系统里定义那些代表数据库对象的文件存放位置,比如表和索引等。一旦表空间被创建,那么就可以在创建数据库对象时通过名称来引用他。 一个数据库可以有一个或多个表空间,创建数据库时自动创建系统表空间sys_defau

[转帖]金仓数据库KingbaseES V8R6 索引膨胀

索引膨胀 对于索引,随着业务不断的增删改,会造成膨胀,尤其Btree索引,也会涉及索引分裂、合并等,导致索引访问效率降低、维护成本增加。另外,索引页的复用与HEAP PAGE不一样,因为索引的内容是有序结构,只有符合顺序的ITEM才能插入对应的PAGE中,不像HEAP TUPLE,只要有空间就可以插

[转帖]金仓数据库KingbaseES V8R6 中unlogged表

KingbaseESV8R6有一种表称为unlogged,在该表新建的索引也属于unlogged。和普通表的区别是,对该表进行DML操作时候不将该表的变更记录变更写入到wal文件中。在数据库异常关机或者异常崩溃后该表的数据会被truncate掉,但是在写入性能上会比普通表快几倍。 这个特性类似于or

[转帖]金仓数据库KingbaseES V8R6索引坏块故障处理

案例说明: 在执行表数据查询时,出现下图所示错误,索引故障导致表无法访问,后重建索引问题解决。本案例复现了此类故障解决过程。 适用版本: KingbaseES V8R3/R6 一、创建测试环境 # 表结构信息prod=# \d+ test1 Table "public.test1" Column|

[转帖]金仓数据库KingbaseES数据目录结构

KingbaseES数据库结构 [kingbase@postgresV8]$ tree -LP2data/.├── data│ ├── base # 存储用户创建的数据库文件及隶属于用户数据库的所有关系.比如表、索引...│ ├── current_logfiles. # 记录当前被日志收集器写入的

[转帖]金仓数据库KingbaseES 数据库参数优化

目录 一、数据库应用类型 二、主要参数 max_connections shared_buffers effective_cache_size maintenance_work_mem checkpoint_completion_target wal_buffers default_statisti

[转帖]金仓数据库KingbaseES误删除系统超级用户(superuser)权限的恢复方式

`https://blog.csdn.net/arthemis_14/article/details/129879269` 在使用KingbaseES数据库的时候,系统默认存在一个跟系统初始化用户同名的Superuser(默认是system用户,可更改)。 这个Superuser的存在其实对于权限的

[转帖]金仓数据库KingbaseES分区表 -- 声明式创建分区表

https://www.modb.pro/db/638045 1. 创建分区表同时创建分区 1.1 准备环境 # 创建分区表同时创建分区 create table tb1(id bigint,stat date,no bigint,pdate date,info varchar2(50)) part

[转帖]如何通过JMeter测试金仓数据库KingbaseES并搭建环境

1.安装JMeter Apache JMeter是Apache组织开发的基于Java的压力测试工具,主要用于对软件的压力测试,它最初被设计用于Web应用测试,但后来扩展到其它测试领域。它可测试静态、动态资源,如静态文件、Java小服务程序、CGI脚本、Java对象、数据库等等。JMeter可以用于对