KingbaseES数据库目录结构

[kingbase@postgres V8]$ tree -LP 2 data/
.
├── data
│ ├── base # 存储用户创建的数据库文件及隶属于用户数据库的所有关系.比如表、索引...
│ ├── current_logfiles. # 记录当前被日志收集器写入的日志文件的文件
│ ├── global # 包含集簇范围的表的子目录,database control文件该文件记录着数据集簇标识符及版本、检查点信息、块大小等信息
│ ├── initdb.conf # 数据库初始化参数,安装并初始化
│ ├── kingbase.auto.conf # 存储由ALTER SYSTEM 设置的配置参数的文件
│ ├── kingbase.conf # 存储用户自设置的配置参数的文件
│ ├── kingbase.opts # 记录服务器最后一次启动时使用的命令行参数的文件
│ ├── sys_aud # 存储kingbase审计相关信息
│ ├── sys_bulkload # KingbaseES提供的快速加载数据的默认路径
│ ├── sys_commit_ts # 事务提交时间戳数据目录
│ ├── sys_csnlog # 包含事务提交序列号和子事务状态数据的子目录
│ ├── sys_dynshmem # 动态共享内存子系统所使用的文件的子目录
│ ├── sys_hba.conf # 存储客户端认证方式的配置文件
│ ├── sys_ident.conf # 存储客户端认证所需的用户名映射的配置文件
│ ├── sys_log # 日志文件
│ ├── sys_logical # 用于逻辑复制的状态数据的子目录
│ ├── sys_multixact # 多事务multi-t ransaction状态数据的子目录(用于共享的行锁)
│ ├── sys_notify # 包含LISTEN/NOTIFY状态数据的子目录
│ ├── sys_replslot # 复制槽数据的子目录
│ ├── sys_serial # 已提交的可序列化事务信息的子目录
│ ├── sys_snapshots # 导出的快照的子目录
│ ├── sys_stat # 用于统计子系统的永久文件的子目录
│ ├── sys_stat_tmp # 用于统计信息子系统的临时文件的子目录
│ ├── sys_tblspc # 指向表空间目录的符号链接的子目录,该符号链接所指向的表空间目录中存储了所属该表空间的数据文件。
│ ├── sys_twophase # 用于预备事务状态文件的子目录
│ ├── SYS_VERSION. # 包含KingbaseES主版本号的文件
│ ├── sys_wal # WAL(预写日志)文件的子目录
│ └── sys_xact # 事务提交状态数据的子目录
└── kingbase.pid # 记录当前的kingbase进程ID(PID)集簇数据目录路径、kingbase启动时间戳、端口号、Unix域套接字目 录路径(Windows上为空)、第一个可用的listen_address (IP地址或者*,或者为空表示不在TCP上监听 )以及共享内存段ID(服务器关闭后该文件不存在)
# 通过ipcs命令查看共享内存的地址信息,可以看到shared memory segments中的key值0x033cdf69
# 将十六进制Key值0x033cdf69转换为十进制,正好等于54321001,即为共享内存的key。
# 第二个数字为shmid的值,即为共享内存的id [kingbase@postgres data]$ cat kingbase.pid
20903
/home/kingbase/data
1668096698
54321
/tmp
*
54321001 16
ready
[kingbase@postgres data]$ ipcs ------ Message Queues --------
key msqid owner perms used-bytes messages ------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 2 gdm 777 16384 1 dest
0x00000000 5 gdm 777 2129920 2 dest
0x033cdf69 16 kingbase 600 56 6 ------ Semaphore Arrays --------
key semid owner perms nsems
0x075b8ee0 3 dmdba 666 1

BASE目录:

在KingbaseES数据库中,数据文件被组织成一个个页面Page,页面大小为8k.对数据文件的I/O操作都是以页面为单位。
数据文件包含数据和对象,例如表、索引、存储过程和视图。
对于实例里的每个数据库,在data/base目录里都有一个子目录对应,子目录的名字为该数据库在sys_database里的OID.
这个子目录是该数据库所有数据文件的缺省位置;特别值得一提的是,该数据库的系统目录存储在此。 在该目录下,每个表和索引都存储在独立的文件里.这些文件以表或索引的filenode号命名.
它可以在sys_class.relfilenode中找到.
对于临时关系.文件名的形式为tBBB_FFF,其中BBB是创建该文件的后台会话的后台ID,FFF是文件节点号。
所有情况下,每个表和索引,在其主文件(或者说主分支)之外,都有一个空闲空间映射分支,存储可用空闲空间的信息。
空闲空间映射存储在一个文件中,该文件以节点号加上后缀_fsm命名.
此外每个表还有一个可见性映射分支,存储在一个后缀为_vm的文件中.
用于跟踪哪些页面已知含有非死亡元组。不被日志记录的表和索引还有第三个分支,即初始化分支,它存储在后缀为_init的分支中。 在表或者索引超过1GB后,它会被划分成1G大小的段。
第一个段的文件名和文件节点相同;之后的段被命名为filenode.1、filenode.2等等。
这样的处理避免了在有文件大小限制平台上的问题.(实际1GB只是默认的段尺寸。段尺寸可以在编译KingbaseES时使用配置选项--with-segsize进行调整).
原则上,空闲空间映射和可见性映射分支也可以要求多个段,但实际上很少发生。 纯数字的是主表数据文件或索引数据文件
以_fsm后缀的就是Free Space Mapping文件
以vm后缀的就是visibility map ├── base # SELECT OID, DATNAME FROM SYS_DATABASE;
│ ├── 1
│ ├── 16268
│ ├── 16269
│ └── 16270
├── sys_filenode.map
└── sys_internal.init
└── SYS_VERSION sys_filenode.map 是sys_class里relfilenode为0的系统表,OID与文件的硬编码映射。
sys_internal.init 是系统表的cache文件,用于加快读取.默认不存在,查询系统表后自动产生。
SYS_VERSION 是当前数据库数据格式对应的版本号
其它文件是需要到sys_class里根据OID查到对应的relfilenode来与文件名匹配 注意:
虽然一个表的文件节点通常和它的OID相匹配,但实际上并不是必须如此.
比如 TRUNCATE、REINDEX、CLUSTER以及某些形式的ALTER TABLE,都可以改变文件节点而同时保留 OID。
我们不应该假设文件节点和表 OID 相同。
此外对于包含sys_class本身在内的特定系统目录,其sys_class.relfilenode包含0。
这些目录的实际文件节点号被存储在一个低层数据结构中,可以用sys_relation_filenode()函数获取。

GLOBAL

存储全局的系统表信息和全局控制信息

数字命名的文件用于存储系统表的内容。
它们在sys_class里的relfilenode都为0,是靠sys_filenode.map将OID与文件硬编码映射
注意:不是所有的系统表的relfilenode都为0 以下语句可以查询OID对应的表名/物理文件名 select oid, relname from sys_class where relfilenode=0 order by oid;
select sys_relation_filenode(:oid); 纯数字的是主表数据文件或索引数据文件
以_fsm 后缀的就是Free Space Mapping文件
以 vm 后缀的就是visibility map 注意:系统表分为全局系统表和库级系统表。
全局系统表位于global下,如:sys_database,sys_tablespace,sys_auth_members这种存储系统级对象的表。
库级系统表位于数据库目录下,如:sys_type,sys_proc,sys_attribute这种存储库级对象的表。
值得注意的是sys_class位于库级目录的里,但也包含全局系统表信息,因此在改动全局系统表信息时需要注意。 [kingbase@postgres data]$ tree global
global
├── 1136 # sys_pltemplate
├── 1137 # sys_pltemplate_name_index
├── 1213 # sys_tablespace
├── 1214 # sys_shdepend
├── 1232 # sys_shdepend_depender_index
├── 1233 # sys_shdepend_reference_index
├── 1260 # sys_authid
├── 1261 # sys_auth_members
├── 1262 # sys_database
├── 2396 # sys_shdescription
├── 2397 # sys_shdescription_o_c_index
├── 2671 # sys_database_datname_index
├── 2672 # sys_database_oid_index
├── 2676 # sys_authid_rolname_index
├── 2677 # sys_authid_oid_index
├── 2694 # sys_auth_members_role_member_index
├── 2695 # sys_auth_members_member_role_index
├── 2697 # sys_tablespace_oid_index
├── 2698 # sys_tablespace_spcname_index
├── 2846 # sys_toast_2396
├── 2847 # sys_toast_2396_index
├── 2964 # sys_db_role_setting
├── 2965 # sys_db_role_setting_databaseid_rol_index
├── 2966 # sys_toast_2964
├── 2967 # sys_toast_2964_index
├── 3592 # sys_shseclabel
├── 3593 # sys_shseclabel_object_index
├── 4060 # sys_toast_3592x
├── 4061 # sys_toast_3592_index
├── 4175
├── 4176
├── 4177
├── 4178
├── 4179
├── 4180
├── 4181
├── 4182
├── 4183
├── 4184
├── 4185
├── 4186
├── 6000 # sys_replication_origin
├── 6001 # sys_replication_origin_roiident_index
├── 6002 # sys_replication_origin_roname_index
├── 6100
├── 6114
├── 6115
├── 7968
├── 7969
├── 8042
├── 8046
├── 8048
├── 8059
├── 8074
├── 8076
├── sys_control # 存储全局控制信息,对应的是ControlFileData结构体
├── sys_filenode.map # 将当前目录下系统表的OID与具体文件名进行硬编码映射(每个用户创建的数据库目录下也有同名文件).
# 对应RelMapFile结构体, 结构体大小为:62*8+4*4=496+16=512。
# 也就是说这个文件最多存放62条系统catalog表的记录
└── sys_internal.init # 缓存系统表,加快系统表读取速度(每个用户创建的数据库目录下也有同名文件)

SYS_WAL

预写式日志(Write-Ahead Logging(WAL))是保证数据完整性、实现事务日志的一种标准方法。
WAL的中心思想是对数据文件的修改(它们是表和索引的载体)当修改已经被记录在日志中之后,即在描述这些变化的日志被刷到持久存储后。
如果遵循这种过程,将不需要在每个事务提交时写数据到磁盘。
当数据库系统崩溃后,会从上一次成功的checkpoint点开始依次重放wal记录,假如lsn>wal_lsn则重放wal记录,反之跳过,确保数据记录恢复到崩溃前的状态。
预写式日志记录在sys_wal中。
WAL日志的优点 使用WAL可以减少磁盘读写的频率次数。
保证事务被提交时才会将日志文件内容写入到磁盘。
在没有触发checkpoint检查点时不用将数据持久化,减少读写磁盘频率次数。
日志文件按照顺序写入,同步日志的代价要远小于刷写数据页面的代价。
在OLTP系统性能影响尤其明显。
使用WAL能够保证数据的完整性。
提供数据库在线备份和恢复。
通过归档的WAL文件,支持恢复到被任意时刻。
通过数据库的物理备份,WAL日志恢复数据到自己希望的时间。
另外物理备份不必是数据库状态的一个即时快照。
通过WAL日志的恢复可以修复内部的不一致。
WAL日志SEGMENT wal segment文件存储着数据库每一条数据变化明细。
每一条记录数据变化明细都是服务于数据库恢复操作,确保前后数据一致。
针对数据的任意一次修改操作均被记录在wal segment文件中,包括insert、update和delete。
包括系统的一些管理行为也会被记录在wal segment文件中,例如事务提交和vacuum等行。
wal segment文件命名形如00000001 00000001 0000001A,文件名共24位,前8位是timeline,中间8位是logid,后8位是logseg,logseg的前6位始终是0,后2位是lsn的前2位。根据wal segment文件名的最后2位,
wal segment根据对应的LSN分别记录在不同的wal segment文件中 [kingbase@postgres data]$ tree sys_wal/
sys_wal/
├── 000000010000000000000051
└── archive_status
ARCHIVE_STATUS archive_status是wal segment文件的备份目录。
.ready 是等待被归档的wal日志。
.done 是已经被归档完成的wal日志。
.backup 主备环境
超出wal_keep_segments数目限制的wal日志会在archive_status目录内被打标,归档操作完成后被进一步移除。

关于.HISTORY文件

.history文件内容包括原.history文件,当前时间线切换记录和切换原因,作用于数据库的时间点恢复行为。
当数据库从多个时间线的备份中恢复时,数据库从.history文件中找到从sys_control的start_timeline到指定的recovery_target_timeline间的所有wal段文件进行恢复。
每发生一次主备切换此文件ID+1.可以判断主备切换次数。

SYS_XACT

sys_xact是事务提交日志(Commit Log)的存储目录.
事务提交日志默认256KB,文件名形如XXXX,
系统初始化后从0000开始递增至FFFF。
事务已被冻结的文件可以被vacuum清理。 在sys_class . relfrozenxid之前的所有事务 ID在表中已经被替换为一个永久的(“冻结的”) 事务ID 。
用于跟踪表是否需要被清理,以便阻止事务 ID回卷或者允许 sys_xact 被收缩。
如果该关系不是一个表则为0( InvalidTransactionId ) 通过指定 VACUUM 操作强制执行来防止表中事务ID回卷之前,表的 sys_class . relfrozenxid 保持最大事务年龄。
注意即便自动清理被禁用,系统也将发起自动清理进程来阻止回卷。
清理允许从 sys_xact 子目录中移除旧文件,默认值为2亿事务。

关于Page

数据库文件在Linux平台被划分为默认8K固定长度的page进行管理。
通过数据库初始化指定block_size参数page的大小。
如果page设低了,相同数据量的文件需要分裂成更多的page,IO次数和索引分裂次数都会增加,性能会降低较多;
如果page设高了,page内部的数据检索效率会降低,性能一样会降低不少,一般来说8K和16K对于数据库系统来说是最优解。

KingbaseES数据库目录结构的更多相关文章

  1. ECMALL目录结构设置与数据库表

    [Ecmall]ECMALL目录结构设置与数据库表   最近在做ecmall的开发,ecmall在开源方面还有待进步啊,官方没有提供开发文档,也没有关于系统架构组织的贡献,使用者都要自己从0开始,官方 ...

  2. Oracle目录结构及创建新数据库

    oracle目录结构 当需要创建新的数据仓库时我可以用 Database Configuration Assistant(数据库配置助手) admin 存放创建的不同数据库 cfgtoollogs c ...

  3. mybatis映射文件的使用(一),工程目录结构、源代码和数据库

    代码开发环境 开发工具为IDEA 工程构建方式为maven 数据库为mysql 5.7.20 mybatis版本为 3.1.1 mysql-connect-java jar包版本为 5.1.34 数据 ...

  4. Spring+hibernate+JSP实现Piano的数据库操作---1.目录结构+展示

    目录结构 界面

  5. KingbaseES 数据库软件卸载

    关键字: KingbaseES.卸载   一.安装后检查 在安装完成后,可以通过以下几种方式进行安装正确性验证: 1. 查看安装日志,确认没有错误记录; 2. 查看开始菜单: 查看应用程序菜单中是否安 ...

  6. KingbaseES 数据库删除功能组件

      关键字: KingbaseES.卸载.删除功能   一.安装后检查 在安装完成后,可以通过以下几种方式进行安装正确性验证: 1. 查看安装日志,确认没有错误记录; 2. 查看开始菜单: 查看应用程 ...

  7. 【JBOSS】 JBOSS目录结构

    JBOSS在默认情况下可以用3种方式启动minimal,default和all.三种模式内部的模块数量依次递增   例如: 1-执行JBOSS_HOME/bin/run.bat批量处理文件启动JBos ...

  8. 每天一个linux命令(23):Linux 目录结构

    对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...

  9. grape动态PHP结构(一)——目录结构与配置文件

    一.结构介绍 结构的名字grape,中文名叫葡萄,因为最近一个同事经常带葡萄到公司给我们吃,受到启发想到了这个名字. 1)本结构需要在PHP5.5中运行,如果要在5.4中运行,有些地方就要做些修改 2 ...

  10. linux下的目录结构和内容

    用了这么长时间linux系统,有时候哪个文件应该在哪还是不知道的,所以对于根下的目录结构记下: /bin bin是Binary的缩写.这个目录存放着最经常使用的命令. /boot这里存放的是启动Lin ...

随机推荐

  1. Python学习之实例2

    一.根据输入的各科成绩统计学生成绩是否达标 1 (背景:输入学生数量,以及各个学生语文.数学.英语.历史四科的成绩,如果总成绩小于 240,则成绩不达标,否则成绩合格) 2 3 #coding=utf ...

  2. 超精准!AI 结合邮件内容与附件的意图理解与分类!⛵

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 TensorFlow 实战系列:https://www.showmeai ...

  3. day20-web开发会话技术02

    WEB开发会话技术02 6.Cookie的生命周期 默认情况下,Cookie只在浏览器的内存中存活,也就是说,当你关闭浏览器后,Cookie就会消失.但是也可以通过方法设置cookie的生存时间. c ...

  4. Windows机器下VSCode安装及使用CmakeLists编译工程demo

    使用VSCode, Mingw and Cmake写工程代码,从零开始写的那种,全过程分享...... 你若发现该帖中有待商榷的地方,还请指正赐教,先行拜谢了! 1 软件下载 1.1 vscode下载 ...

  5. Asp.Net Core&Jaeger实现链路追踪

    前言 随着应用愈发复杂,请求的链路也愈发复杂,微服务化下,更是使得不同的服务分布在不同的机器,地域,语言也不尽相同.因此需要借助工具帮助分析,跟踪,定位请求中出现的若干问题,以此来保障服务治理,链路追 ...

  6. 用最少的代码打造一个Mini版的gRPC框架

    在<用最少的代码模拟gRPC四种消息交换模式>中,我使用很简单的代码模拟了gRPC四种消息交换模式(Unary.Client Streaming.Server Streaming和Dupl ...

  7. 干电池升压IC或者干电池升压芯片

    1, 干电池升压IC                            升压输出3V,3,3V,5V等3V-5V可调 2, 单节锂电池升压IC                     升压输出4. ...

  8. 3D旋转不能对齐,元素边倾斜

    1 <!DOCTYPE html> 2 <html lang="en"> 3 4 <head> 5 <meta charset=" ...

  9. Ubuntu20.04 Java相关环境(JDK、Mysql、Redis、nacos、influxdb)部署以及运行

    重装了系统,系统版本号为:Ubuntu20.04 1.云平台 登录云平台,选择要重装的服务器,关机.一键重装即可 2.安装jdk 下载jdk-8u341-linux-x64.tar.gz,并复制到服务 ...

  10. 使用pip命令安装库时提示Could not build wheels for six, since package 'wheel' is not installed

    在使用pip命令安装库时提示Could not build wheels for six, since package 'wheel' is not installed 解决以上问题可用 pip in ...