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. 一个 MySQL 隐式转换的坑,差点把服务器整崩溃了

    我是风筝,公众号「古时的风筝」,专注于 Java技术 及周边生态. 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在里面. 本来是一个平静而美好的下午,其 ...

  2. Springboot实现验证码登录

    Springboot实现验证码登录 1.背景 本人近期正在完成毕业设计(旅游信息管理系统)的制作,采用的SpringBoot+Thymeleaf的模式.在登录网站时想要添加验证码验证,通过网上查找资料 ...

  3. gin领域层:用户实体编写和值对象(初步)

    1.用户实体和值对象 2. 要做的事 3.常见的四层模型 4.Domin层 5.值对象

  4. PGL图学习之图神经网络GNN模型GCN、GAT[系列六]

    PGL图学习之图神经网络GNN模型GCN.GAT[系列六] 项目链接:一键fork直接跑程序 https://aistudio.baidu.com/aistudio/projectdetail/505 ...

  5. UBOOT编译--- UBOOT的$(version_h) $(timestamp_h)(七)

    1. 前言 UBOOT版本:uboot2018.03,开发板myimx8mmek240. 2. 概述 在编译uboot的过程中,有两个特别的依赖version_h 和 timestamp_h,它们定义 ...

  6. Android 按钮自定义背景后点击没有动画效果

    只需要在按钮中添加属性就可以了 android:foreground="?selectableItemBackground"

  7. X活手环的表盘自定义修改

    文章用到的所有工具及软件成品 前言 前几天我在某宝买了一个智能手环,无奈软件中的表盘太少,所有我想着修改一下app中的资源文件. 反编译APK 这里反编译APK用apktool工具就可以. apkto ...

  8. 基于jenkins+kubernetes的cicd流程实践一:环境搭建及方案原理实现

    1.基础环境:Centos7.9,kubernetes:v1.21.5 node-1@112(master):docker,containerd,harbornginx(80),git,etcd no ...

  9. 2020最新Java面试题及答案(带完整目录).pdf

    一.JVM 二.Java集合 三.Java多线程并发 四.Java基础 五.Spring原理 六.微服务 七.Netty与RPC 八.网络 九.日志 十.RabbitMQ 十一.MongoDB 十二. ...

  10. 《HTTP权威指南》– 8.网关、Web机器人

    集成点:网关.隧道及中继 网关 网关(gateway): 资源和应用程序之间的粘合剂.应用程序可以(通过HTTP或其它已定义的接口)请求网关来处理某条请求,网关可以提供一条响应.网关可以向数据库发送查 ...