【赵渝强老师】高斯数据库(openGauss)的物理存储结构
2026/9/24 17:32:56 网站建设 项目流程

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

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

视频讲解如下

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

下面分别进行介绍。

数据文件

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

openGauss=# select oid,datname from pg_database;# 输出的信息如下:oid|datname-------+-----------1|template116384|school16420|finance14809|template016470|scott14814|postgres(6rows)

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

openGauss=# select oid,relname,relkind,relfilenode from pg_class where relname ='testtable1';# 输出的信息如下:oid|relname|relkind|relfilenode-------+------------+---------+-------------16517|testtable1|r|16517(1row)16517是表testtable1的OID。

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

日志文件

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

运行日志(pg_log)

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

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(1row)

服务器日志

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

gs_ctl-Ddata/single_node/-l logfilestart

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

控制文件

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

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

cd/home/postgres/training/gaussdb

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

[postgres@opengauss gaussdb]$ pg_controldatadata/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 Backupstartlocation: 0/0 Backupendlocation: 0/0End-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 Maximumdataalignment: 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/timetypestorage: 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。下表对这三个参数文件的作用分别进行了介绍。


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询