【赵渝强老师】高斯数据库(openGauss)的物理存储结构

b470

在openGauss数据库集群初始化的时候会创建一个目录,通常都会使用系统配置相关的环境变量$PGDATA来表示。当数据库初始化完成后,会在这个目录生成相关的子目录以及一些文件。下图就是openGauss数据库的物理结构:
image

openGauss数据库的物理存储结构主要是指硬盘上存储的文件,包括:数据文件、日志文件、参数文件、控制文件、WAL预写日志文件等等,视频讲解如下:

image.png
点击这里查看视频讲解:【赵渝强老师】高斯数据库(openGauss)的物理存储结构

下面分别进行介绍。

数据文件

顾名思义,数据文件用于存储数据,文件名以oid命名。对于超出1G的数据文件,openGauss会自动将其拆分为多个文件来存储,而拆分的文件名将由pg_class中的relfilenode字段来决定。通过下面的步骤可以确定表所对应的数据文件。
(1)查看数据库的oid。

openGauss=# select oid,datname from pg_database;

# 输出的信息如下:  
  oid  |  datname  
-------+-----------
     1 | template1
 16384 | school
 16420 | finance
 14809 | template0
 16470 | scott
 14814 | postgres
(6 rows)

(2)查询前面创建的testtable1表的OID。

openGauss=# select oid,relname,relkind,relfilenode from pg_class where relname ='testtable1';

# 输出的信息如下:  
  oid  |  relname   | relkind | relfilenode 
-------+------------+---------+-------------
 16517 | testtable1 | r       |       16517
(1 row)

 16517是表testtable1的OID。

(3)查看表空间mydemotbs对应的目录,如下图所示。
image

日志文件

openGauss的日志文分为运行日志、WAL预写日志和服务器日志。下面分别进行介绍。

运行日志(pg_log)

在默认的情况下,openGauss开启了运行日志。通过查看主postgresql.conf文件的配置可以看到相关的参数设置。运行时日志一般是记录数据库服务器与数据库的状态,比如各种错误信息、定位慢查询SQL、数据库的启动关闭信息、发生检查点过于频繁等的告警信息等等。该日志有.csv格式和.log格式,建议使用.csv格式。因为.csv格式一般会按大小和时间自动切割。pg_log是可以被清理删除、压缩打包或者转移,同时不影响数据库的正常运行。当有遇到数据库无法启动或者更改参数没有生效时,第一步就可以查看运行时日志。下图展示了主参数文件postgresql.conf中关于运行日志的配置参数。
image

WAL预写日志(pg_xlog)

pg_xlog 这个目录是记录的openGauss的WAL信息。WAL是Write Ahead Logging的缩写,即预写日志,它是保证数据完整性的一种标准方法。简单来说就是在openGauss数据库中要对数据文件进行修改时必须先写入WAL日志信息,即当WAL日志记录完成了持久化,刷新到永久储存之后才能更改数据文件。根据这个原则就不需要在每次提交事务的时候都刷新数据到磁盘。因为当数据库出现宕机发生数据丢失时,可以重新执行WAL日志来达到恢复数据库的目的。因此WAL日志也可以叫做redo重做日志,因为任何没有写到数据文件上的改动都可以根据日志记录进行重做。openGauss数据库使用WAL优势主要有以下两个方面:

  • 首先,由于在数据库数据发生变更时会先将WAL日志缓冲区中的重做日志写入磁盘,因此即使在数据库发生宕机时,数据缓冲区中的数据还没有全部写入到永久存储中的情况下,也可以通过磁盘上的WAL日志信息来恢复数据库丢失的数据;

  • 其次,在提交事务操作时仅仅是把WAL日志写入到磁盘上,并不会将数据刷新到磁盘。因此,从I/O次数来说,刷新WAL日志的次数要比刷新数据文件的次数少得多;从IO花销来说,WAL刷新是连续I/O,而数据刷新是随机I/O,因此,WAL刷新花销小得多。

在默认的情况下,单个WAL预写日志文件的大小是16M,通过参数wal_segment_size决定。

openGauss=# show wal_segment_size;
 wal_segment_size 
------------------
 16MB
(1 row)

服务器日志

如果用_ctl启动的时候没有指定-l参数来指定服务器日志,错误可能会输出到cmd前台。使用“-l”参数将生成的服务器日志文件,它记录了数据库的重要信息。

gs_ctl -D data/single_node/ -l logfile start

下图展示了在启动数据库服务器时,产生的服务器日志文件。
image

控制文件

控制文件记录了数据库运行时的一些信息,比如数据库oid、是否是打开状态、WAL的位置、检查点的信息等等。openGauss的控制文件是很重要的数据库文件。控制文件默认保存在$PGDATA/global/pg_control目录下,可以使用命令bin/pg_controldata查看控制文件的内容,具体的操作步骤如下:

(1)进入openGauss的安装目录。

cd /home/postgres/training/gaussdb

(2)执行命令查看控制文件的内容。

[postgres@opengauss gaussdb]$ pg_controldata data/single_node

# 输出的信息如下:
pg_control version number:            923
Catalog version number:               201611171
Database system identifier:           3423487896412314
Database cluster state:               in production
pg_control last modified:             2024年10月07日 星期一 01时33分26秒
Latest checkpoint location:           0/4002600
Prior checkpoint location:            0/40024E0
Latest checkpoint's REDO location:    0/4002580
Latest checkpoint's TimeLineID:       1
Latest checkpoint's full_page_writes: off
Latest checkpoint's NextXID:          15853
Latest checkpoint's NextOID:          16525
Latest checkpoint's NextMultiXactId:  2
Latest checkpoint's NextMultiOffset:  0
Latest checkpoint's oldestXID:        11555
Latest checkpoint's oldestXID's DB:   14809
Latest checkpoint's oldestActiveXID:  15853
Latest checkpoint's remove lsn:       0/1
Time of latest checkpoint:            2024年10月07日 星期一 01时33分26秒
Minimum recovery ending location:     0/0
Backup start location:                0/0
Backup end location:                  0/0
End-of-backup record required:        no
Current wal_level setting:            hot_standby
Current max_connections setting:      250
Current max_prepared_xacts setting:   200
Current max_locks_per_xact setting:   256
Maximum data alignment:               8
Database block size:                  8192
Blocks per segment of large relation: 131072
WAL block size:                       8192
Bytes per WAL segment:                16777216
Maximum length of identifiers:        64
Maximum columns in an index:          32
Maximum size of a TOAST chunk:        1996
Date/time type storage:               64-bit integers
Float4 argument passing:              by value
Float8 argument passing:              by value
Database system TimeLine:             9

参数文件

openGauss数据库的参数文件主要包括三个,它们分别是postgresql.conf、pg_hba.conf和pg_ident.conf。下表对这三个参数文件的作用分别进行了介绍。
image

posted @ 2026-09-23 17:43  赵渝强老师  阅读(8)  评论(0)    收藏  举报