当前位置: 首页 > article >正文

【赵渝强老师】PostgreSQL的物理存储结构

在这里插入图片描述

PostgreSQL在执行initdb的数据库集群初始化时会指定一个目录。该目录通过环境变量$PGDATA来表示。当数据库集群初始化完成后,会在这个目录生成相关的子目录以及一些文件。这些生成的文件就是PostgreSQL的物理存储结构中的文件。如下图所示。
在这里插入图片描述

如上图所示,环境变量$PGDATA指向的目录就是/home/postgres/training/pgsql/data。

下表说明了其中的每个目录的功能与作用。
在这里插入图片描述

PostgreSQL数据库的物理存储结构主要是指硬盘上存储的文件,包括:数据文件、日志文件、参数文件、控制文件、WAL预写日志文件等等。

视频讲解如下

【赵渝强老师】PostgreSQL的物理存储结构

一、数据文件

顾名思义,数据文件用于存储数据,文件名以oid命名。对于超出1G的数据文件,PostgreSQL会自动将其拆分为多个文件来存储,而拆分的文件名将由pg_class中的relfilenode字段来决定。

二、日志文件

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

2.1 运行日志(pg_log)

在默认的情况下,运行日志没有开启。通过查看主postgresql.conf文件的配置可以看到相关的参数设置,开启后会自动生成该日志文件。运行时日志一般是记录数据库服务器与数据库的状态,比如各种错误信息、定位慢查询SQL、数据库的启动关闭信息、发生检查点过于频繁等的告警信息等等。该日志有.csv格式和.log格式,建议使用.csv格式。

2.2 WAL预写日志(pg_xlog)

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

2.3 事务日志(pg_xact)

pg_xact是事务提交日志,记录了事务的元数据。默认开启。内容一般不能直接读。默认存储在目录$PGDATA/pg_xact/。

2.4 服务器日志

如果用pg_ctl启动的时候没有指定-l参数来指定服务器日志,错误可能会输出到cmd前台。下图展示了在启动数据库服务器时,使用“-l”参数生成的服务器日志文件,它记录了数据库的重要信息。
在这里插入图片描述

三、控制文件

控制文件记录了数据库运行时的一些信息,比如数据库oid、是否是打开状态、WAL的位置、检查点的信息等等。PostgreSQL的控制文件是很重要的数据库文件。控制文件默认保存在$PGDATA/global/pg_control目录下。

四、参数文件

PostgreSQL数据库的参数文件主要包括四个,它们分别是postgresql.conf、pg_hba.conf、pg_ident.conf和postgresql.auto.conf。


http://www.kler.cn/a/420287.html

相关文章:

  • M31系列LoRa分布式IO模块功能简介
  • Spark常问面试题---项目总结
  • DevOps工程技术价值流:GitLab源码管理与提交流水线实践
  • 如何手搓一个智能激光逗猫棒
  • 新手学习:网页前端、后端、服务器Tomcat和数据库的基本介绍
  • 用于LiDAR测量的1.58um单芯片MOPA(一)
  • 【jvm】C1编译器和C2编译器的区别
  • 解决maya渲染慢、渲染卡顿等问题
  • Qt/C++实现帧同步播放器/硬解码GPU绘制/超低资源占用/支持8K16K/支持win/linux/mac/嵌入式/国产OS等
  • 详解Qt pdf 之QPdfSelection 选择文本类
  • debian 11 虚拟机环境搭建过坑记录
  • 机器学习7-AdaBoost算法
  • Springboot聚合工程实现不同module使用不同的数据库配置操作数据库,实现自由切库
  • CTF-PWN: 全保护下格式化字符串利用 [第一届“吾杯”网络安全技能大赛 如果能重来] 赛后学习(不会)
  • 《Serverless 架构:引领未来软件开发的新趋势》
  • 【Vue3】弹窗添加鼠标hover上边缘左、下的的拉伸宽度高度操作
  • atcoder abc 382 lazy_tag线段树
  • 关于Nginx前后端分离部署spring boot和vue工程以及反向代理的配置说明
  • 学习ASP.NET Core的身份认证(基于Session的身份认证2)
  • 域名解析系统 DNS
  • vue和react的diff算法区别?
  • Git 使用总结
  • 【前端面试】数据结构与set和map
  • ETSI EN 300328 标准的一些笔记
  • Qt | TCP客户端简单实现+TCP助手测试
  • Unity Ads的常见问题:投放、变现、安装等注意事项