之前的博客中,我们了解了OpenGauss的系统结构,如下:
openGauss 系统结构 说明
https://www.cndba.cn/dave/article/116446
本篇我们继续来了解下OpenGauss的物理结构。
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 这个目录结构。
[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 文件在官方手册并没有搜到。
其他的目录主要有如下:
- base∶默认表空间的目录。该目录包含了数据库中各个数据库,每个数据库都是由一个文件夹组成,文件名是该数据库的oid,这个可以通过数据字典pg_database来查看对应的数据库名(select oid,datname from pg_database)。
- global∶一些共享系统表的目录。该目录包含集群范围的各个表和相关视图。 ( pg_database、 pg_tablespace )。
- pg_clog∶commit log的目录。 该目录包含事务提交状态数据。
- pg_notify 该目录包含LISTEN/NOTIFY状态数据。
- pg_serial 该目录包含了已经提交的序列化事务的有关信息。
- pg_snapshots 该目录包含导出的快照。
- pg_stat_tmp 该目录包含统计子系统的临时文件。
- pg_logical 该目录包含逻辑解码的状态数据。
- pg_replslot 该目录包含复制槽数据。
- pg_stat 该目录包含统计子系统的永久文件。
- PG_VERSION 包含版本信息。
- postmaster.pid 启动后pg主进程ID。
- pg_log∶系统日志目录,在查询一些系统错误时就可查看此目录下的日志文件。
- pg_tblsp∶存储了指向各个用户自建表空间实际目录的链接文件。
- pg_twophase∶使用两阶段提交功能时分布式事务的存储目录。
- pg_xlog∶WAL日志的目录。
- 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]#
- pg_filenode.map :pg_class里relfilenode为0的系统表,OID与文件的硬编码映射。
- pg_internal.init :系统表的cache文件,用于加快读取。默认不存在,查询系统表后自动产生。
- PG_VERSION :当前数据库数据格式对应的版本号
- 其它文件是需要到pg_class里根据OID查到对应的relfilenode来与文件名匹配的。
例如:cndba表的relfilenode是16391,那么16391 这个文件就是dave表的数据文件:
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]#
对于系统表分为:全局系统表和库级系统表。
- 全局系统表:位于global下,例如:pg_database, pg_tablespace,pg_auth_members这种存储系统级对象的表。
- 库级系统表:位于数据库目录下,例如: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]#
版权声明:本文为博主原创文章,未经博主允许不得转载。