签到成功

知道了

CNDBA社区CNDBA社区

openGauss 数据库 物理(目录)结构 说明

2023-03-11 22:33 1542 0 原创 openGauss
作者: dave

之前的博客中,我们了解了OpenGauss的系统结构,如下:http://www.cndba.cn/dave/article/116484

openGauss 系统结构 说明
https://www.cndba.cn/dave/article/116446

本篇我们继续来了解下OpenGauss的物理结构。http://www.cndba.cn/dave/article/116484http://www.cndba.cn/dave/article/116484

1 物理结构路径

OpenGauss数据库的目录是我们在安装的时候参数中指定的,比如我们之前的博客中指定了相关信息:

<!--dbnode-->
            <PARAM name="dataNum" value="1"/>
            <PARAM name="dataPortBase" value="15400"/>
            <PARAM name="dataNode1" value="/data/openGuass/install/data/dn"/>
            <PARAM name="dataNode1_syncNum" value="0"/>

Linux 7.6 平台 openGauss 3.1.1 单机版 安装手册
https://www.cndba.cn/dave/article/116448

所以我们这里讲的物理结构,就是/data/openGuass/install/data/dn 这个目录结构。http://www.cndba.cn/dave/article/116484http://www.cndba.cn/dave/article/116484

[dave@www.cndba.cn ~]# ps -ef|grep openGauss
omm      30366     1  7 Mar10 ?        01:14:38 /data/openGauss/install/app/bin/gaussdb -D /data/openGauss/install/data/dn
root     38461 38278  0 16:19 pts/8    00:00:00 grep --color=auto openGauss
[dave@www.cndba.cn ~]# cd /data/openGauss/install/data/dn
[dave@www.cndba.cn dn]# tree -L 2
.
├── base
│   ├── 1
│   ├── 15481
│   ├── 15486
│   ├── 16389
│   └── pgsql_tmp
├── cacert.pem
├── gaussdb.state
├── global
│   ├── 14902
│   ├── 14902_fsm
│   ├── 14902_vm
│   ├── 14904
│   ├── 14905
│   ├── 14977
│   ├── 14979
│   ├── 14980
│   ├── 15127
│   ├── 15129
│   ├── 15131
│   ├── 15132
│   ├── 15133
│   ├── 15133_fsm
│   ├── 15133_vm
│   ├── 15135
│   ├── 15136
│   ├── 15137
│   ├── 15137_fsm
│   ├── 15137_vm
│   ├── 15139
│   ├── 15140
│   ├── 15142
│   ├── 15143
│   ├── 15144
│   ├── 15144_fsm
│   ├── 15144_vm
│   ├── 15146
│   ├── 15147
│   ├── 15148
│   ├── 15148_fsm
│   ├── 15148_vm
│   ├── 15150
│   ├── 15152
│   ├── 15153
│   ├── 15193
│   ├── 15195
│   ├── 15196
│   ├── 15197
│   ├── 15198
│   ├── 15200
│   ├── 15202
│   ├── 15203
│   ├── 15204
│   ├── 15205
│   ├── 15205_fsm
│   ├── 15205_vm
│   ├── 15207
│   ├── 15208
│   ├── 15209
│   ├── 15209_fsm
│   ├── 15209_vm
│   ├── 15211
│   ├── 15212
│   ├── 15213
│   ├── 15213_fsm
│   ├── 15213_vm
│   ├── 15215
│   ├── 15216
│   ├── 15237
│   ├── 15239
│   ├── 15267
│   ├── 15269
│   ├── 15270
│   ├── 15274
│   ├── 15276
│   ├── 15277
│   ├── 15285
│   ├── 15304
│   ├── 15304_fsm
│   ├── 15304_vm
│   ├── 15373
│   ├── 15375
│   ├── 15376
│   ├── 15394
│   ├── 15396
│   ├── 15397
│   ├── 15398
│   ├── 15398_fsm
│   ├── 15398_vm
│   ├── 15400
│   ├── 15401
│   ├── 15402
│   ├── 15404
│   ├── 15405
│   ├── 15482
│   ├── 15482_fsm
│   ├── 15482_vm
│   ├── 15484
│   ├── 15485
│   ├── config_exec_params
│   ├── pg_control
│   ├── pg_control.backup
│   ├── pg_dw_0
│   ├── pg_dw_meta
│   ├── pg_dw_single
│   ├── pg_filenode.map
│   ├── pg_filenode.map.backup
│   ├── pg_internal.init.92608
│   └── pg_remain_segs
├── gs_gazelle.conf
├── gswlm_userinfo.cfg
├── mot.conf
├── pg_clog
│   └── 000000000000
├── pg_csnlog
│   └── 000000000000
├── pg_ctl.lock
├── pg_errorinfo
├── pg_hba.conf
├── pg_hba.conf.bak
├── pg_hba.conf.lock
├── pg_ident.conf
├── pg_llog
│   ├── mappings
│   └── snapshots
├── pg_location
├── pg_logical
│   └── replorigin_checkpoint
├── pg_multixact
│   ├── members
│   └── offsets
├── pg_notify
│   └── 000000000000
├── pg_replslot
├── pg_serial
├── pg_snapshots
├── pg_stat_tmp
│   └── pgstat.stat
├── pg_tblspc
├── pg_twophase
├── PG_VERSION
├── pg_xlog
│   ├── 000000010000000000000001
│   ├── 000000010000000000000002
│   ├── 000000010000000000000003
│   ├── 000000010000000000000004
│   ├── 000000010000000000000005
│   ├── 000000010000000000000006
│   ├── 000000010000000000000007
│   ├── 000000010000000000000008
│   ├── 000000010000000000000009
│   ├── 00000001000000000000000A
│   ├── 00000001000000000000000B
│   ├── 00000001000000000000000C
│   ├── 00000001000000000000000D
│   ├── 00000001000000000000000E
│   ├── 00000001000000000000000F
│   ├── 000000010000000000000010
│   ├── 000000010000000000000011
│   └── archive_status
├── postgresql.conf
├── postgresql.conf.guc.bak
├── postgresql.conf.lock
├── postmaster.opts
├── postmaster.pid
├── postmaster.pid.lock
├── server.crt
├── server.key
├── server.key.cipher
├── server.key.rand
└── undo
    ├── permanent
    ├── temp
    ├── undometa
    └── unlogged

31 directories, 144 files
[dave@www.cndba.cn dn]# 

[dave@www.cndba.cn dn]# ll
total 4972
drwx------ 7 omm dbgrp      95 Feb 19 17:16 base
-rw------- 1 omm dbgrp    4399 Feb 19 16:37 cacert.pem
-rw------- 1 omm dbgrp      72 Mar 10 22:40 gaussdb.state
drwx------ 2 omm dbgrp    4096 Mar 10 22:57 global
-rw------- 1 omm dbgrp     354 Feb 19 16:37 gs_gazelle.conf
-rw------- 1 omm dbgrp 4915200 Feb 19 16:38 gswlm_userinfo.cfg
-rw------- 1 omm dbgrp   20218 Feb 19 16:37 mot.conf
drwx------ 2 omm dbgrp      34 Feb 19 16:37 pg_clog
drwx------ 2 omm dbgrp      34 Feb 19 16:37 pg_csnlog
-rw------- 1 omm dbgrp       0 Mar 10 22:40 pg_ctl.lock
drwx------ 2 omm dbgrp      10 Feb 19 16:37 pg_errorinfo
-rw------- 1 omm dbgrp     347 Mar 10 22:57 pg_hba.conf
-rw------- 1 omm dbgrp     347 Mar 10 22:57 pg_hba.conf.bak
-rw------- 1 omm dbgrp    1024 Feb 19 16:38 pg_hba.conf.lock
-rw------- 1 omm dbgrp    1636 Feb 19 16:37 pg_ident.conf
drwx------ 4 omm dbgrp      51 Feb 19 16:37 pg_llog
drwx------ 2 omm dbgrp      10 Feb 19 16:37 pg_location
drwx------ 2 omm dbgrp      43 Mar 11 16:23 pg_logical
drwx------ 4 omm dbgrp      48 Feb 19 16:37 pg_multixact
drwx------ 2 omm dbgrp      34 Mar 10 22:40 pg_notify
drwx------ 2 omm dbgrp      10 Feb 19 16:37 pg_replslot
drwx------ 2 omm dbgrp      10 Feb 19 16:37 pg_serial
drwx------ 2 omm dbgrp      10 Feb 19 16:37 pg_snapshots
drwx------ 2 omm dbgrp      33 Mar 11 16:24 pg_stat_tmp
drwx------ 2 omm dbgrp      10 Feb 19 16:37 pg_tblspc
drwx------ 2 omm dbgrp      10 Feb 19 16:37 pg_twophase
-rw------- 1 omm dbgrp       4 Feb 19 16:37 PG_VERSION
drwx------ 3 omm dbgrp    4096 Mar 11 13:14 pg_xlog
-rw------- 1 omm dbgrp   34096 Feb 19 16:55 postgresql.conf
-rw------- 1 omm dbgrp   34118 Feb 19 16:38 postgresql.conf.guc.bak
-rw------- 1 omm dbgrp    1024 Feb 19 16:37 postgresql.conf.lock
-rw------- 1 omm dbgrp      79 Mar 10 22:40 postmaster.opts
-rw------- 1 omm dbgrp      96 Mar 10 22:40 postmaster.pid
-rw------- 1 omm dbgrp       0 Feb 19 16:37 postmaster.pid.lock
-rw------- 1 omm dbgrp    4402 Feb 19 16:37 server.crt
-rw------- 1 omm dbgrp    1766 Feb 19 16:37 server.key
-rw------- 1 omm dbgrp      56 Feb 19 16:37 server.key.cipher
-rw------- 1 omm dbgrp      24 Feb 19 16:37 server.key.rand
drwx------ 5 omm dbgrp      87 Feb 19 16:38 undo
[dave@www.cndba.cn dn]#

因为opengauss官方手册并没有目录结构的介绍,所以我们参考pg 的目录来进行说明。

目录下有5个配置文件:

[dave@www.cndba.cn dn]# ll *.conf
-rw------- 1 omm dbgrp   354 Feb 19 16:37 gs_gazelle.conf
-rw------- 1 omm dbgrp 20218 Feb 19 16:37 mot.conf
-rw------- 1 omm dbgrp   347 Mar 10 22:57 pg_hba.conf
-rw------- 1 omm dbgrp  1636 Feb 19 16:37 pg_ident.conf
-rw------- 1 omm dbgrp 34096 Feb 19 16:55 postgresql.conf
[dave@www.cndba.cn dn]#

postgresql.conf∶数据库实例的主配置文件,基本上所有的配置参数都在此文件中。
pg_hba.conf∶认证配置文件,配置了允许哪些IP的主机访问数据库,认证的方法等信息。
pg_ident.conf∶”ident”认证方式的用户映射文件。
mot.conf:内存优化表(Memory-Optimized Table,MOT)的配置文件。
gs_gazelle.conf 文件在官方手册并没有搜到。http://www.cndba.cn/dave/article/116484

其他的目录主要有如下:http://www.cndba.cn/dave/article/116484

  1. base∶默认表空间的目录。该目录包含了数据库中各个数据库,每个数据库都是由一个文件夹组成,文件名是该数据库的oid,这个可以通过数据字典pg_database来查看对应的数据库名(select oid,datname from pg_database)。
  2. global∶一些共享系统表的目录。该目录包含集群范围的各个表和相关视图。 ( pg_database、 pg_tablespace )。
  3. pg_clog∶commit log的目录。 该目录包含事务提交状态数据。
  4. pg_notify 该目录包含LISTEN/NOTIFY状态数据。
  5. pg_serial 该目录包含了已经提交的序列化事务的有关信息。
  6. pg_snapshots 该目录包含导出的快照。
  7. pg_stat_tmp 该目录包含统计子系统的临时文件。
  8. pg_logical 该目录包含逻辑解码的状态数据。
  9. pg_replslot 该目录包含复制槽数据。
  10. pg_stat 该目录包含统计子系统的永久文件。
  11. PG_VERSION 包含版本信息。
  12. postmaster.pid 启动后pg主进程ID。
  13. pg_log∶系统日志目录,在查询一些系统错误时就可查看此目录下的日志文件。
  14. pg_tblsp∶存储了指向各个用户自建表空间实际目录的链接文件。
  15. pg_twophase∶使用两阶段提交功能时分布式事务的存储目录。
  16. pg_xlog∶WAL日志的目录。
  17. undo:存放undo 数据,因为openGauss没有类似Oracle的UNDO表空间,因此在UNDO实现上是和Oracle有着一定的区别的。openGauss的undo数据存储在$PGDATA/undo目录下。可以看到undo目录下有三个目录和一个undometa文件,undometa是undo的元数据文件。permanent是存储UNDO的持久化数据的。这部分数据丢失,会导致USTORE表数据的不一致。因此$PGDATA/undo目录绝对不能随便删除。
[dave@www.cndba.cn undo]# pwd
/data/openGauss/install/data/dn/undo
[dave@www.cndba.cn undo]# ll
total 48272
drwx------ 2 omm dbgrp        6 Feb 19 16:38 permanent
drwx------ 2 omm dbgrp        6 Feb 19 16:38 temp
-rw------- 1 omm dbgrp 49426944 Feb 19 16:37 undometa
drwx------ 2 omm dbgrp        6 Feb 19 16:38 unlogged
[dave@www.cndba.cn undo]#

2 global目录说明

global名如其意,存放的文件用于存储全局的系统表信息和全局控制信息。

global下有四种文件:
1.pg_control:用于存储全局控制信息
2.pg_filenode.map: 用于将当前目录下系统表的OID与具体文件名进行 硬编码 映射(每个用户创建的数据库目录下也有同名文件)。
3.pg_internal.init:用于缓存系统表,加快系统表读取速度(每个用户创建的数据库目录下也有同名文件)。
4.全局系统表文件:数字命名的文件,用于存储系统表的内容。它们在pg_class里的relfilenode都为0,是靠pg_filenode.map将OID与文件硬编码映射。但并不是所有的系统表的relfilenode都为0。

[dave@www.cndba.cn global]# pwd
/data/openGauss/install/data/dn/global
[dave@www.cndba.cn global]# ll -lr
total 525348
-rw------- 1 omm dbgrp        24 Mar 10 22:40 pg_remain_segs
-rw------- 1 omm dbgrp     60832 Mar 10 22:40 pg_internal.init.92608
-rw------- 1 omm dbgrp      4096 Feb 19 16:38 pg_filenode.map.backup
-rw------- 1 omm dbgrp      4096 Feb 19 16:38 pg_filenode.map
-rw------- 1 omm dbgrp 268435456 Mar 10 22:40 pg_dw_single
-rw------- 1 omm dbgrp     24576 Mar 10 22:40 pg_dw_meta
-rw------- 1 omm dbgrp 268435456 Mar 11 20:53 pg_dw_0
-rw------- 1 omm dbgrp       232 Mar 11 20:53 pg_control.backup
-rw------- 1 omm dbgrp      8192 Mar 11 20:53 pg_control
-rw------- 1 omm dbgrp      6750 Mar 10 22:57 config_exec_params
-rw------- 1 omm dbgrp     16384 Feb 19 17:16 15485
-rw------- 1 omm dbgrp     16384 Feb 19 17:16 15484
-rw------- 1 omm dbgrp      8192 Feb 19 17:16 15482_vm
-rw------- 1 omm dbgrp     24576 Feb 19 16:38 15482_fsm
-rw------- 1 omm dbgrp      8192 Feb 19 17:16 15482
-rw------- 1 omm dbgrp      8192 Feb 19 16:38 15405
……

3 base目录说明

base目录用于存放数据库的所有实体文件。例如,我们创建的库ustc的OID为16389 ,那么在base下就会产生一个名为16389 的目录,用于存储ustc的数据文件。

[dave@www.cndba.cn ~]$ gsql -d postgres -p 15400
Password: 
gsql ((openGauss 3.0.3 build 46134f73) compiled at 2023-01-10 22:42:07 commit 0 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

openGauss=# select oid,datname from pg_database;
  oid  |  datname  
-------+-----------
     1 | template1
 16389 | ustc
 15481 | template0
 15486 | postgres
(4 rows)

openGauss=# 

[dave@www.cndba.cn dn]# cd base/
[dave@www.cndba.cn base]# ls
1  15481  15486  16389  pgsql_tmp
[dave@www.cndba.cn base]# cd 16389
[dave@www.cndba.cn 16389]# ll -r
total 13068
-rw------- 1 omm dbgrp       4 Feb 19 17:16 PG_VERSION
-rw------- 1 omm dbgrp  253368 Mar 10 22:40 pg_internal.init.92608
-rw------- 1 omm dbgrp    4096 Feb 19 17:16 pg_filenode.map.backup
-rw------- 1 omm dbgrp    4096 Feb 19 17:16 pg_filenode.map
-rw------- 1 omm dbgrp    8192 Feb 19 17:16 15480
-rw------- 1 omm dbgrp    8192 Feb 19 17:16 15479
-rw------- 1 omm dbgrp    8192 Feb 19 17:16 15478
-rw------- 1 omm dbgrp       0 Feb 19 17:16 15476
……
[dave@www.cndba.cn 16389]# cat PG_VERSION 
9.2
[dave@www.cndba.cn 16389]# pwd
/data/openGauss/install/data/dn/base/16389
[dave@www.cndba.cn 16389]#
  1. pg_filenode.map :pg_class里relfilenode为0的系统表,OID与文件的硬编码映射。
  2. pg_internal.init :系统表的cache文件,用于加快读取。默认不存在,查询系统表后自动产生。
  3. PG_VERSION :当前数据库数据格式对应的版本号
  4. 其它文件是需要到pg_class里根据OID查到对应的relfilenode来与文件名匹配的。

例如:cndba表的relfilenode是16391,那么16391 这个文件就是dave表的数据文件:http://www.cndba.cn/dave/article/116484

openGauss=# /c ustc
Password for user omm: 
Non-SSL connection (SSL connection is recommended when requiring high-security)
You are now connected to database "ustc" as user "omm".
ustc=# create table cndba as select * from pg_class;
INSERT 0 790
ustc=# commit;
WARNING:  there is no transaction in progress
COMMIT
ustc=# select count(1) from cndba;
 count 
-------
   790
(1 row)

ustc=# select oid,relfilenode,relname from pg_class where relname='cndba';
  oid  | relfilenode | relname 
-------+-------------+---------
 16391 |       16391 | cndba
(1 row)

[dave@www.cndba.cn 16389]# pwd
/data/openGauss/install/data/dn/base/16389
[dave@www.cndba.cn 16389]# ll 16391
-rw------- 1 omm dbgrp 204800 Mar 11 20:58 16391
[dave@www.cndba.cn 16389]# 

[dave@www.cndba.cn 16389]# pwd
/data/openGauss/install/data/dn/base/16389
[dave@www.cndba.cn 16389]# ll 16391
-rw------- 1 omm dbgrp 204800 Mar 11 20:58 16391
[dave@www.cndba.cn 16389]#

对于系统表分为:全局系统表和库级系统表。http://www.cndba.cn/dave/article/116484http://www.cndba.cn/dave/article/116484

  1. 全局系统表:位于global下,例如:pg_database, pg_tablespace,pg_auth_members这种存储系统级对象的表。
  2. 库级系统表:位于数据库目录下,例如:pg_type,pg_proc,pg_attribute这种存储库级对象的表。

4 表空间目录说明

ustc=# select oid,* from pg_tablespace;
 oid  |  spcname   | spcowner | spcacl | spcoptions | spcmaxsize | relative 
------+------------+----------+--------+------------+------------+----------
 1663 | pg_default |       10 |        |            |            | f
 1664 | pg_global  |       10 |        |            |            | f
(2 rows)

对于每个非默认的oid都在data/pg_tblspc下对应一个名为oid的软链接文件,指向真正的space目录。

openGauss=# create tablespace ustc location '/data/openGauss/install/data/ustc';
CREATE TABLESPACE
openGauss=# select oid,* from pg_tablespace;
  oid  |  spcname   | spcowner | spcacl | spcoptions | spcmaxsize | relative 
-------+------------+----------+--------+------------+------------+----------
  1663 | pg_default |       10 |        |            |            | f
  1664 | pg_global  |       10 |        |            |            | f
 16399 | ustc       |       10 |        |            |            | f
(3 rows)

openGauss=# 

[dave@www.cndba.cn ~]$ cd /data/openGauss/install/data/dn/pg_tblspc/
[dave@www.cndba.cn pg_tblspc]$ ll
total 0
lrwxrwxrwx 1 omm dbgrp 33 Mar 11 21:04 16399 -> /data/openGauss/install/data/ustc
[dave@www.cndba.cn pg_tblspc]$ 



openGauss=# create table cndba(id int) tablespace ustc; 
CREATE TABLE
openGauss=# /dt cndba
                         List of relations
 Schema | Name  | Type  | Owner |             Storage              
--------+-------+-------+-------+----------------------------------
 public | cndba | table | omm   | {orientation=row,compression=no}
(1 row)

openGauss=# select oid,relfilenode,relname from pg_class where relname='cndba';
  oid  | relfilenode | relname 
-------+-------------+---------
 16400 |       16400 | cndba
(1 row)


[dave@www.cndba.cn 16399]$ pwd
/data/openGauss/install/data/dn/pg_tblspc/16399
[dave@www.cndba.cn 16399]$ tree
.
└── PG_9.2_201611171_dn_6001
    ├── 15486
    │   └── 16400
    └── pgsql_tmp

3 directories, 1 file
[dave@www.cndba.cn 16399]$ 


[dave@www.cndba.cn PG_9.2_201611171_dn_6001]# pwd
/data/openGauss/install/data/ustc/PG_9.2_201611171_dn_6001
[dave@www.cndba.cn PG_9.2_201611171_dn_6001]# tree
.
├── 15486
│   └── 16400
└── pgsql_tmp

2 directories, 1 file
[dave@www.cndba.cn PG_9.2_201611171_dn_6001]#

版权声明:本文为博主原创文章,未经博主允许不得转载。

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
dave

dave

关注

人的一生应该是这样度过的:当他回首往事的时候,他不会因为虚度年华而悔恨,也不会因为碌碌无为而羞耻;这样,在临死的时候,他就能够说:“我的整个生命和全部精力,都已经献给世界上最壮丽的事业....."

  • 2237
    原创
  • 2
    翻译
  • 535
    转载
  • 185
    评论
  • 访问:6528968次
  • 积分:4229
  • 等级:核心会员
  • 排名:第1名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ