[转帖]超详细的PostgreSQL体系结构总结,值得收藏

超详细的PostgreSQL体系结构总结,值得收藏

https://www.toutiao.com/i6715390855772897800/

原创 波波说运维 2019-07-26 00:03:00

概述

今天本文主要从日志文件、参数文件、控制文件、数据文件、redo日志(WAL)、后台进程这六个方面来介绍一下PostgreSQL的架构。


架构

PostgreSQL的主要架构如下:


一、日志文件

1、日志文件种类

1)$PGDATA/log 运行日志(pg10之前为$PGDATA/pg_log)

2)$PGDATA/pg_wal 重做日志(pg10之前为$PGDATA/pg_xlog)

3)$PGDATA/pg_xact 事务提交日志(pg10之前为$PGDATA/pg_clog)

4)服务器日志,可以在启动的时候指定,比如pg_ctl start -l ./alert.log

2、 运行日志

运行日志主要相关的参数如下,默认没有开启的话没有log目录,开启后会自动生成。

3、事务日志pg_xact

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

4、 服务器日志

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

lsof或许可以过滤出在写的日志文件

$lsof -c postgres| grep REG | grep -v /usr | grep -v /dev | grep -v /SYS

二、参数文件

1、 postgresql.conf

pg的主要参数文件,有很详细的说明和注释,和Oracle的pfile,MySQL的my.cnf类似。默认在$PGDATA下。很多参数修改后都需要重启。9.6之后支持了alter system来修改,修改后的会存在$PGDATA/postgresql.auto.conf下,可以reload或者 restart来使之生效。

主要的参数如下:

2、pg_hba.conf

这个是黑白名单的设置。文件里有详细的参数说明,默认参数如下:

type 列有local,host,hostssl,hostnossl四种。local是本地认证

database 可以是all,或者指定的数据库

user列可以是all,或者具体的用户

address 可以是ip或者网段

method比较重要,有"trust", "reject", "md5", "password", "scram-sha-256", "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert"这么多可选。trust是免密登录;reject是黑名单拒绝;md5是加密的密码;password是没有加密的密码;ident是Linux下PostgreSQL默认的local认证方式,凡是能正确登录服务器的操作系统用户(注:不是数据库用户)就能使用本用户映射的数据库用户不需密码登录数据库

3、 pg_ident.conf

pg_ident.con是用户映射配置文件。结合pg_hba.connf中,method为ident可以用特定的操作系统用户和指定的数据库用户登录数据库。如下:

pg_ident.conf如下:

pg_hba.conf如下:


三、控制文件

1、 控制文件位置

$PGDATA/global/pg_control

控制文件在数据库目录的global目录下。控制文件记录了数据库的重要信息。

2、 查看控制文件

pg_controldata可以查看控制文件的内容

$ pg_controldata $PGDATApg_control version number: 1100Catalog version number: 201809051Database system identifier: 6684270596680436587 #dbidDatabase cluster state: in production # primarypg_control last modified: Thu 16 May 2019 02:26:37 PM CSTLatest checkpoint location: 0/48812A0Latest checkpoint‘s REDO location: 0/4881268 #redo 位置Latest checkpoint‘s REDO WAL file: 000000010000000000000001 #wal文件号Latest checkpoint‘s TimeLineID: 1Latest checkpoint‘s PrevTimeLineID: 1Latest checkpoint‘s full_page_writes: onLatest checkpoint‘s NextXID: 0:572 #下一个事务idLatest checkpoint‘s NextOID: 16388 #下一个OID.....

controlfile记录了数据库运行的一些信息,比如数据库id,是否open,wal的位置,checkpoint的位置,等等。controlfile是很重要的文件,数据库部署和调整。


四、数据文件

1、page

pg中,每个索引和表都是一个单独的文件,pg中叫做page。默认是每个大于1G的page会被分割pg_class.relfilenode.1这样的文件。

Page默认大小为8KB,最大32KB,一个数据块中可存放多行的数据。块中的结构如下图:

块头记录了如下信息:

  • 块的checksum值
  • 空闲空间的起始位置和结束位置
  • 特殊数据的起始位置
  • 其他一些信息
  • 行指针是一个32bit的数字,具体结构如下:
  • 行内容的偏移量,占15bit;
  • 指针的标记,占2bit;
  • 行内容的长度,占15bit。

行指针中表示行内容的偏移量是15bit,能表示的最大偏移量是2^15=32768,因此块的最大大小是32768,即32KB。

2、page物理位置

page的物理位置在$PGDATA/BASE/DATABASE_OID/PG_CLASS.RELFILENODE

需要注意的是,pg_class.relfilenode类似dba_objects.data_object_id,truncate表之后relfilenode会变。对应的物理文件名字也会变。


五、WAL日志

1、wal位置

wal在$PGDATA/pg_wal下。10之前为pg_xlog

2、wal命名格式

文件名称为16进制的24个字符组成,每8个字符一组,每组的意义如下

3、手动切换WAL日志的命令

在PG10之前:

highgo=# select pg_switch_xlog(); pg_switch_xlog ---------------- 0/B000C48(1 row)

在PG10之后:

highgo=# select pg_switch_wal(); pg_switch_wal ---------------- 0/B000C48(1 row)

六、后台进程

pg后台进程说明如下:

原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/11620212.html

时间: 2024-08-30 07:18:27

[转帖]超详细的PostgreSQL体系结构总结,值得收藏的相关文章

【转帖】史上最全PostgreSQL体系结构

史上最全PostgreSQL体系结构 2019年07月16日 18:00:00 Enmotech 阅读数 35 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/enmotech/article/details/96225598 墨墨导读:本文主要从日志文件.参数文件.控制文件.数据文件.redo日志(WAL).后台进程这六个方面来讨论PostgreSQL的结构. 7月16日晚20:30-2

[转帖]分层存储超详细解读,为什么大数据时代它已不可或缺

分层存储超详细解读,为什么大数据时代它已不可或缺 http://www.itpub.net/2019/10/16/3467/ 如今,分层存储已成为了一种常见的存储方法,它将数据存储在具有不同特性(如性能.成本和容量)的不同存储介质上.不同的存储媒介被分配到不同的层次结构中,其中最高性能的存储媒介被认为是第0层或第1层,然后是第2层.第3层等等. 0层或1层通常是由闪存或基于3D Xpoint技术的固态硬盘(SSD)组成,以此往下的存储层可能涉及高性能光纤通道或SAS驱动器(或RAID阵列),较低

[WinForm] VS2010发布、打包安装程序(超全超详细)

1. 在vs2010 选择"新建项目"→" 其他项目类型"→" Visual Studio Installer→"安装项目": 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1."应用程序文件夹"表示要安装的应用程序需要添加的文件: 2."用户的'程序'菜单"表示:应用程序安装完,用户的"开始菜单"中的显示的内容,一般在这个文件夹中,需要再创建一个文件用来存放

IntelliJ IDEA 12 创建Web项目 教程 超详细版

原文:IntelliJ IDEA 12 创建Web项目 教程 超详细版 IntelliJ IDEA 12 新版本发布 第一时间去官网看了下  黑色的主题 很给力 大体使用了下  对于一开始就是用eclipse的童鞋们 估计很难从eclipse中走出来 当然 我也很艰难的走在路上 ... 首先要说一点,在IntelliJ IDEA里面“new Project” 就相当于我们eclipse的“workspace”,而“new Module”才是创建一个工程. 这个和Eclipse有很大的区别 1.官

【转】图文cadence allegro16.6 超详细破解教程(附cadence16.6破解文件)

Win8下安装cadence allegro16.6出错的解决方法: 自从 cadence allegro 16.6 发布后小菜发现很多爱好电子设计的朋友寻找破解方法,所以小菜写了这篇文章,详细图文介绍了cadence allegro 16.6 的具体破解步骤.Win8.1发布了也有一段时间了,很多朋友升级到了此系统,本教程同样适用Win8下 和16.6以前版本的cadence的破解.为什么很多朋友Win8下破解出问题呢,原因是Win8系统默认很多运行库没有安装,cadence allegro的

Android自定义相机超详细讲解

Android自定义相机超详细讲解 转载请标明出处: http://blog.csdn.net/vinicolor/article/details/49642861: 由于网上关于Android自定义相机的文章写得不是太详细,Google官方的文档又说得不太容易理解,所以今天我来详细讲解一下Android自定义相机. 这篇文章主要写给一些刚刚接触Android的那些看官方API困难以及不太了解Android机制的同学们,所以熟练开发者可以绕道了. 最近在使用Camera类的时候发现居然被弃用了,

超全超详细的HTTP状态码大全

超全超详细的HTTP状态码大全 本部分余下的内容会详细地介绍 HTTP 1.1中的状态码.这些状态码被分为五大类: 100-199 用于指定客户端应相应的某些动作. 200-299 用于表示请求成功. 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息. 400-499 用于指出客户端的错误. 500-599 用于支持服务器错误. 一些常见的状态代码为: 200 – 服务器成功返回网页 404 – 请求的网页不存在 503 – 服务器暂时不可用 以下提供了 HTTP 状

Oracle11超详细安装教程和配置

这篇博客主要是介绍一下Oracle数据的安装过程和简单的配置,帮助大家可以简单的让Oracle运行起来,只是一个基础的教程. 准备工作: 如果你以前装过Oracle数据库,而且安装目录要改变请先打开注册表编辑器里的: HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\和HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Oracle11和它下面的几个.如果你没安装过Oracle产品的话在注册表里面的与Oracle有关的注册

IntelliJ IDEA 12 创建Web项目 教程 超详细版(转)

IntelliJ IDEA 12 新版本发布 第一时间去官网看了下  黑色的主题 很给力 大体使用了下  对于一开始就是用eclipse的童鞋们 估计很难从eclipse中走出来 当然 我也很艰难的走在路上 ... 首先要说一点,在IntelliJ IDEA里面“new Project” 就相当于我们eclipse的“workspace”,而“new Module”才是创建一个工程. 这个和Eclipse有很大的区别 1.官网下载下来的默认不是黑色的主题 这里需要修改一下 工具栏上的扳手图标 或