PostgreSQL核心揭秘(二)-进程和内存架构

目录

1、进程架构

2、进程架构图

3、内存架构

4、内存架构图

PostgreSQL 的进程架构采用了一个多进程的设计,这使其能够有效地管理并发连接和资源。以下是 PostgreSQL 的主要进程架构组成部分的详细描述:

1. 主进程(Postmaster)

  • 功能:Postmaster 是 PostgreSQL 的主进程,负责启动和管理所有其他进程。它监听客户端连接请求,并为每个连接创建新的后端进程。

  • 重要性:Postmaster 还负责处理数据库的配置、管理共享内存和控制系统资源。

2. 后端进程(Backend Processes)

  • 功能:每当有客户端连接到 PostgreSQL 时,Postmaster 会为该连接创建一个新的后端进程。后端进程处理客户端请求、执行 SQL 查询并返回结果。

  • 并发性:PostgreSQL 的每个连接都是一个独立的后端进程,这样可以有效地隔离不同连接之间的工作,避免互相干扰。

3. 维护进程(Maintenance Processes)

PostgreSQL 还包含几个重要的维护进程,负责不同的后台任务:

  • 检查点进程(Checkpointer):

    功能:定期将内存中的数据写入磁盘,以保持数据的一致性并减少恢复时间。

  • 归档进程(Archiver):

    功能:负责将 WAL(Write-Ahead Logging)日志文件存档,以便在需要时进行恢复。

  • Autovacuum 进程(Autovacuum Daemon):

    功能:自动清理死元组(deleted tuples)并回收空间,优化数据库性能。

4. WAL 进程

  • WAL(Write-Ahead Logging):用于确保数据的持久性和一致性。在进行任何数据更改之前,WAL 记录会被写入日志,确保即使发生系统故障也能恢复数据。

5. 后台工作进程

  • 后台工作进程(Background Workers):

    功能:用户可以定义自定义的后台工作进程来执行特定任务,如并行查询、数据分析等。

6. 统计信息进程

  • 统计信息进程(Stats Collector):收集关于查询执行时间、锁等待时间等的统计信息,监控和性能调优提供数据支持。

7. 逻辑复制启动器进程

  • 逻辑复制启动器(Logical Replication Launcher):动逻辑复制工作者进程,管理逻辑复制过程中的各种任务。

8. 日志进程

  • 日志进程(logger ):负责将数据库的日志信息记录到日志文件中,便于后续的故障排查和监控。

9. 流复制进程

  • 流复制进程(walsender replication_user streaming ):这是一个用于流复制的进程,它向指定的备份服务器发送 WAL 数据

进程架构图示例

共享内存区域

1. 共享内存 (Shared Memory)

功能:共享内存是 PostgreSQL 的核心内存结构,所有数据库进程都可以访问。这部分内存用于存储:

  • 数据页(data pages)

  • 数据库缓存(shared buffers)

  • WAL(写前日志)缓冲区

  • 配置:可以通过 shared_buffers 参数进行配置。一般建议设置为总内存的 15% 到 25%。

本地内存区域

1. 工作内存 (Work Memory)

功能:每个数据库会话都有自己的工作内存。它主要用于:

  • 排序操作(sort operations)

  • 哈希表(hash tables)

  • 其他临时数据结构

  • 配置:通过 work_mem 参数进行配置。根据并发连接数,适当调整此参数可以有效提高性能。每个连接的工作内存都是独立的,因此在高并发环境中,设置过大可能导致内存耗尽。

2. 维护工作内存 (Maintenance Work Memory)

功能:用于执行维护任务,例如:

  • 创建索引

  • VACUUM 操作

  • ALTER TABLE 等操作

  • 配置:通过 maintenance_work_mem 参数进行配置。可以设置为比工作内存大,以提高维护任务的性能。

3. 临时文件和临时表 (Temporary Files and Temporary Tables)

  • 功能:当工作内存不足以满足操作时,PostgreSQL 会使用临时文件来存储数据。临时表是会话特定的,存储在内存中,直到会话结束。

  • 注意:使用临时文件可能会影响性能,因此应合理配置工作内存以避免过多使用临时文件。

内存架构图示例

公众号内直接回复加群也可以,扫码加群也可以,觉得帖子写的不错,点点关注,点点赞,多多转载,请多多支持。

往期帖子汇总:

数据库维护工具:数据迁移、性能监控、数据修复的全面工具汇总<>

上一篇:PostgreSQL核心揭秘(一):数据库集簇

从零开始学PostgreSQL-工具篇2:碎片回收pg_repack

从零开始学PostgreSQL-工具篇:备份与恢复

从零开始学PostgreSQL (十四):高级功能

从零开始学PostgreSQL (十三):并行查询

从零开始学PostgreSQL (十二):高效批量写入数据库

从零开始学PostgreSQL (十一):并发控制

从零开始学PostgreSQL (十):磁盘使用情况

从零开始学PostgreSQL (九):任务进度报告

从零开始学PostgreSQL (八):监控数据库动态

从零开始学PostgreSQL (七):高可用性、负载平衡和复制

从零开始学PostgreSQL (六):备份和恢复

从零开始学PostgreSQL (五):日常数据库维护任务

从零开始学PostgreSQL (四):数据库角色

从零开始学PostgreSQL (三):索引篇

从零开始学PostgreSQL (二):配置文件

从零开始学PostgreSQL (一):Centos8 RPM安装PostgreSQL16

相关推荐
jiet_h12 分钟前
后端 Verticle 架构实战:用 NeonBeeDeployable 推送一条通知
架构
qq_124987075315 分钟前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
程序猿追17 分钟前
CANN ops-math仓库解读 数学算子的底层支撑与高性能实现
人工智能·架构
芷栀夏29 分钟前
从 CANN 开源项目看现代爬虫架构的演进:轻量、智能与统一
人工智能·爬虫·架构·开源·cann
倒流时光三十年1 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
程序猿追1 小时前
深度剖析 CANN ops-nn 算子库:架构设计、演进与代码实现逻辑
人工智能·架构
码农小卡拉1 小时前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
程序猿追1 小时前
深度解码昇腾 AI 算力引擎:CANN Runtime 核心架构与技术演进
人工智能·架构
怣501 小时前
MySQL多表连接:全外连接、交叉连接与结果集合并详解
数据库·sql
晚霞的不甘1 小时前
CANN 编译器深度解析:TBE 自定义算子开发实战
人工智能·架构·开源·音视频