kingbase-存储结构

发布时间 2023-06-28 17:22:30作者: 原来是你~~~
1、物理存储结构

KingbaseES 数据库实例管理的所有数据在物理上都以操作系统文件的方式存放在磁盘上。

一般情况下,数据库实例所使用的配置和数据文件都被一起存储在名为 data的目录下。

查看 data 目录下文件

$ ls
base              initdb.conf         kingbase.opts  sys_aud        sys_csnlog    sys_ident.conf  sys_multixact  sys_serial     sys_stat_tmp  SYS_VERSION
current_logfiles  kingbase.auto.conf  kingbase.pid   sys_bulkload   sys_dynshmem  sys_log         sys_notify     sys_snapshots  sys_tblspc    sys_wal
global            kingbase.conf       out.html       sys_commit_ts  sys_hba.conf  sys_logical     sys_replslot   sys_stat       sys_twophase  sys_xact
  • base:包含每个数据库对应的子目录,记录每个数据库内对象
    的持久化数据或临时数据。子目录的名字为该数据库在 sys_database 里的 OID 。

kingbase 中 OID 和数据库对应信息

# select oid,datname from sys_database;
  oid  |        datname        
-------+-----------------------
 12135 | test
 12136 | security
     1 | template1
 12134 | template0

操作系统文件数据库子目录

$ ls
1  12134  12135  12136  syssql_tmp

在 KingbaseES 数据库中,数据文件被组织成一个个页面(Page),页面大小为 8k。对数据文件的 I/O 操作都是以页面为单位。

在数据库目录下,每个表和索引都存储在独立的文件里。

  • 普通关系,这些文件以表或索引的 filenode 号命名,它
    可以在表 sys_class 中 relfilenode 字段看到。
select relname,relfilenode from sys_class;
  • 临时关系,文件名的形式为 tBBB_FFF,其中 BBB 是创建该文件
    的后台会话的后台 ID,FFF 是文件节点号。对于所有情况下,每个表和索引,在其主文件(或者说主分支)之外,
    都有一个空闲空间映射分支,它存储关系中可用空闲空间的信息。空闲空间映射存储在一个文件中,该文件以节点号
    加上后缀 _fsm 命名。此外,每个表还有一个可见性映射分支,存储在一个后缀为 _vm 的文件中,它用于跟踪哪些
    页面已知含有非死亡元组。不被日志记录的表和索引还有第三个分支,即初始化分支,它存储在后缀为 _init 的分支中。

在表或者索引超过 1GB 之后,它就被划分成 1G 大小的段。第一个段的文件名和文件节点相同;随后的段被命
名为 filenode.1、filenode.2 等等。这样的安排避免了在某些有文件大小限制的平台上的问题(实际上,1GB 只是默认
的段尺寸。段尺寸可以在编译 KingbaseES 时使用配置选项--with-segsize 进行调整)。

KingbaseES 服务器使用的控制信息记录在 data 目录及子目录下的控制文件中。

日志文件记录数据库的历史操作信息, 包含恢复数据库中的所有事务所需的信息。在 KingbaseES 中,日志文件主要有 WAL 日志、事务日志和在线日志三类。

KingbaseES 主服务器的配置主要通过修改配置文件 kingbase.conf 完成。由 ALTER SYSTEM 修改的配置参数
会被数据库服务器自动记录在 kingbase.auto.conf 中。
配置文件 sys_hba.conf 和 sys_ident.conf 主要用于控制客户端认证。