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

相关推荐
莳花微语7 分钟前
Oracle 用户/权限/角色管理
数据库·oracle
GUIQU.10 分钟前
【Oracle】游标
数据库·oracle
平平无奇。。。10 分钟前
Mysql库的操作和表的操作
linux·数据库·mysql
雪花凌落的盛夏13 分钟前
PostgreSQL数据库备份
数据库·postgresql
Lao A(zhou liang)的菜园14 分钟前
Oracle双平面适用场景讨论会议
数据库·平面·oracle
小小星球之旅15 分钟前
redis缓存常见问题
数据库·redis·学习·缓存
小李是个程序17 分钟前
数据库完整性
数据库·sql
GreatSQL26 分钟前
GreatSQL连接数被打满的3种紧急解决方案
数据库
bxlj_jcj30 分钟前
解锁Java多级缓存:性能飞升的秘密武器
java·缓存·面试·架构
TDengine (老段)30 分钟前
TDengine 高级功能——读缓存
大数据·数据库·缓存·时序数据库·tdengine·涛思数据·iotdb