【 PG 入门系列 】PostgreSQL的体系结构(三)

Postgresql 系列博文讲解(B站同步介绍教学:https://space.bilibili.com/282421760
支持一下,关注一波微信公众号:【 钥道不止 】

1. PG的体系结构

在这里插入图片描述PostgreSQL与Oracle都是使用共享内存的进程结构,而MySQL是线程模型。

1.1. Postmaster进程

守护进程,实际上是第一个postgres进程,主要职责有:

  • 数据库的启停
  • 监听客户端连接
  • 为每个客户端连接衍生(fork)专用的postgres服务进程
  • 当postgres进程出错时尝试修复
  • 管理数据文件
  • 管理数据库的辅助进程

1.2. postgres进程

实际上是postgres的子进程:

  • 直接与客户端进程通讯
  • 负责接收客户端所有的请求
  • 包含数据库引擎,负责解析SQL和生成执行计划等
  • 根据命令的需要调用各中辅助进程和访问各内存结构
  • 负责返回命令执行结果给客户端
  • 在客户端断开连接时释放进程

1.3. 本地内存

本地内存是服务器进程独占的内存结构,每个postgre子进程都会分配一小块相应内存空间,随着连接会话的增加而增加,它不属于实例的一部分。

  • work memory:用于排序的内存
  • maintenance work memory:内部运维工作的内存,如VACUUM垃圾回收、创建和重建索引
  • temp buffer:用于存储临时表的数据

1.4. 数据库实例(INSTANCE)

  • 实例是管理和访问数据库的一套方法,即所有客户端的请求,最终都会转
    换成实例对数据库磁盘文件的各种操作,从而达到读写数据的目的
  • 实例和数据库是一一对应的
  • 实例包含了若干个内存结构和进程

1.4.1. 共享内存

  • Shared buffer
    用于缓存表和索引的数据块。
    数据的读写都是直接对buffer操作,若所需的块不在缓存中,则需要从磁盘中读取。
    在buffer中被修改过的,但又没有写到磁盘文件中的块被称之为脏块。
    大小由shared_buffers参数控制。
  • WAL(Write Ahead Log) buffer:预写日志缓存
    用于缓存增删改等写操作产生的事务日志。
    大小由wal_buffers参数控制
  • Clog buffer:日志缓存
    Commit Log Buffer是记录事务状态的日志缓存
  • Stats buffer
  • Other buffer

1.4.2. 辅助进程

  • Backgroup write:后台写进程(BgWrite),LRU算法清理脏页,将shared buffer中的脏数据页写到磁盘文件中
  • AutoVacuum launcher/workers:系统自动清理进程(自动清理垃圾回收进程)
    当参数autovacuum设为on的时候启用自动清理功能。
    Launcher为清理的守护进程,每次启动的时候会调用一个或多个worker。
    Worker是负责真正清理工作的进程,由autovacuum_max_workers参数设定其数量。
  • WAL Writer:预写式日志进程,将预写日志写入磁盘文件
    触发时机:
    • WAL BUFFER满了;
    • 事务commit时;
    • WAL writer进程到达间歇时间时;
    • checkpoint发生时。
  • Checkpointer:检查点进程
    用于保证数据库的一致性
    它会触发bgwriter和wal writer动作
  • Archiver:归档进程(PgArch)
    用于将写满的WAL日志文件转移到归档目录,该进程只有在归档模式才会启用
  • SysLogger:系统日志进程
    采集PostgreSQL的运行状态,并将运行日志写入日志文件;
    logging_collector参数为on时启动,不建议关闭;
    log_directory设定日志目录;
    log_destination设定日志输出方式,甚至格式;
    log_filename设定日志文件名;
    log_truncate_on_rotation设定是否重复循环使用且删除日志;
    log_rotation_age设定循环时间;
    log_rotation_size设定循环的日志尺寸上线。
  • WAL Sender/Receiver
  • Stats collector:统计信息收集进程(PgStat)
    收集表和索引的空间信息和元组信息等,甚至是表的访问信息。收集到的信息能被优化器和autovaccum利用,甚至给数据库管理员作为数据库管理的参考信息。

1.5. Database Cluster

  • 这里的database cluster并非数据库集群,而是数据库簇,即数据库。PostgreSQL在磁盘上的一整套文件集合叫做database cluster。
  • 数据库包含了数据文件、日志文件等多种文件,用于存储用户数据和保证数据一致性。

1.6. 查询验证

# 进入postgres用户
su - postgres
# 查看postgres进程
ps -ef | grep postgres

在这里插入图片描述

2. PG的数据目录结构

在这里插入图片描述

  • base目录用于存放数据库的所有实体文件,下属子目录均以数据库OID命名
    数据库子目录下是以对象OID命名的文件

  • PG_VERSION 是当前数据库数据格式对应的版本号

  • _fsm结尾的文件是数据文件对应的FSM(free space map)文件,用位图方式来标识哪些block是空闲的

  • _vm结尾的文件是数据文件对应的VM(visibility map),在做多版本并发控制时是通过在元组头上标识“已无效”来实现删除或更新的,最后通过VACUUM功能来清理无效数据回收空闲空间。

  • pg_hba.conf:客户端认证配置文件,可以配置客户的连接协议、加密方式、ACL等等

  • pg_wal:WAL日志目录。

  • pg_xact:Commit log目录。V9版本以前为pg_clog目录。

  • postgresql.conf:配置文件,文本格式。

  • postgresql.auto.conf:也是参数配置文件,所有通过alter命令修改的命令,都会保存在这个文件中,该文件中的参数将会覆盖postgresql.conf文件相同参数的值,该文件为二进制

  • postmaster.pid:Postmaster主进程的操作系统PID,数据库实例正常启动以后就会生成该文件。

  • 表空间目录可以任意指定,结构与base目录类似

3. PG的层级结构

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL 是一种开源关系型数据库管理系统(RDBMS),具有高度的可靠性、可扩展性和数据完整性。它支持大量的数据类型,包括整数、浮点数、字符串、日期和时间等。 以下是 PostgreSQL入门步骤: 1. 安装 PostgreSQL:你可以在官网上下载 PostgreSQL,并按照安装向导进行安装。在安装过程中需要设置一个数据库管理员的用户名和密码。 2. 连接到 PostgreSQL:安装成功后,你可以通过命令行或 GUI 工具连接到 PostgreSQL 数据库。常用的命令行工具有 psql 和 pgAdmin,GUI 工具有 Navicat 和 DBeaver 等。 3. 创建数据库:在连接到 PostgreSQL 后,你需要创建一个数据库。可以使用 CREATE DATABASE 命令来创建数据库,例如: ``` CREATE DATABASE mydb; ``` 4. 创建表:在创建了数据库之后,你需要为其创建表格。表格是用来存储数据的结构。可以使用 CREATE TABLE 命令来创建表格,例如: ``` CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(50), email VARCHAR(50) ); ``` 这个示例代码创建了一个名为 users 的表格,包含 id、name 和 email 个字段。其中 id 是主键,使用了 SERIAL 类型,表示自动递增的整数。 5. 插入数据:在创建表格后,你需要向其中插入数据。可以使用 INSERT INTO 命令来插入数据,例如: ``` INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]'); ``` 这个示例代码向 users 表格中插入了一条记录,包含 name 和 email 两个字段的值。 6. 查询数据:在插入了数据后,你可以使用 SELECT 命令来查询数据,例如: ``` SELECT * FROM users; ``` 这个示例代码查询了 users 表格中的所有记录,并返回了 id、name 和 email 个字段的值。 这些是 PostgreSQL 的基本入门步骤,你可以继续深入学习 PostgreSQL 的高级功能,如索引、触发器、视图等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值