Postgresql数据库体系结构-进程和内存结构

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
日志服务 SLS,月写入数据量 50GB 1个月
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: 数据库体系结构-进程和内存结构(Process and Memory Architecture) 进程结构 服务器进程postmaster后台工作进程后端进程 内存结构 本地内存区 work_memmaintenance_work_memtemp_buffers 共享内存区 shared buffer poolWAL buffercommit log 数据库启动过程 数据库连接过程 PostgreSQL是一个client/server架构rdbms,一个服务器上运行多个进程。

数据库体系结构-进程和内存结构(Process and Memory Architecture)

  • 进程结构

服务器进程postmaster

后台工作进程

后端进程

  • 内存结构

本地内存区

work_mem

maintenance_work_mem

temp_buffers

共享内存区

shared buffer pool

WAL buffer

commit log

  • 数据库启动过程
  • 数据库连接过程

PostgreSQL是一个client/server架构rdbms,一个服务器上运行多个进程。

1、进程结构



Postgres Server Process(postmaster)--pg的主进程,也是父进程,后端进程和后台工作进程都是由server process fork派生出来;同时具有监听的功能

Background Processes--后台工作进程,实现数据库的功能及管理

logger process--日志收集进程,将日志信息输出到日志文件

checkpointer process--检查点进程,执行检查点

writer process--后台写进程,将shared buffer中的数据写入磁盘

wal writer process--后台wal日志写进程,将walbuffer中的日志流写入磁盘

autovacuum launcher process--自动清理进程,清理版本数据,向postmaster主进程申请调用autovacuum进程

archiver process--归档进程,归档wal日志

stats collector process--统计信息收集进(pg_stat_database、pg_stat_activity)

logical replication,wal sender process等其他进程
backed process--后端进程求,用来处理客户端连接请服务

pg postgres [local] idle--本地登陆进程

pg postgres 192.168.6.1(53171) idle--远程登陆进程

pg postgres 192.168.6.1(51846) idle intransaction--远程登陆进程,进程中事务未完成

eg 
[root@pg ~]# pstree -ap |grep post |grep -v grep
|-postmaster,889 -D /opt/postgres/data
| |-postmaster,906 
| |-postmaster,990 
| |-postmaster,991 
| |-postmaster,992 
| |-postmaster,993 
| |-postmaster,994 
| |-postmaster,995 
| |-postmaster,996
| |-postmaster,1249 
| |-postmaster,1301
| `-postmaster,1428`
[root@pg ~]# ps -ef |grep postgres |grep -v grep
pg 889 1 0 09:44 ? 00:00:00 /opt/postgres//bin/postmaster -D /opt/postgres/data
pg 906 889 0 09:44 ? 00:00:00 postgres: logger process 
pg 990 889 0 09:44 ? 00:00:00 postgres: checkpointer process 
pg 991 889 0 09:44 ? 00:00:00 postgres: writer process 
pg 992 889 0 09:44 ? 00:00:00 postgres: wal writer process 
pg 993 889 0 09:44 ? 00:00:00 postgres: autovacuum launcher process 
pg 994 889 0 09:44 ? 00:00:00 postgres: archiver process 
pg 995 889 0 09:44 ? 00:00:00 postgres: stats collector process 
pg 996 889 0 09:44 ? 00:00:00 postgres: bgworker: logical replication launcher 
pg 1249 889 0 09:51 ? 00:00:00 postgres: pg postgres [local] idle
pg 1301 889 0 10:18 ? 00:00:00 postgres: pg postgres 192.168.6.1(51846) idle in transaction
pg 1428 889 0 11:03 ? 00:00:00 postgres: pg postgres 192.168.6.1(53171) idle
[root@pg ~]# 
以上以看出,postmaster fork出其他的进程,其中包括必可须的后台服务进程和后端进程。
注意:
由于所有进程都是由postmster进程派生出来的,不能对进程进行kill操作,否则会造成postmaster重启,也就是数据库重启
杀死后端进程需要使用函数pg_terminate_backend(apid int)
如:
postgres=# select pg_terminate_backend(1301);
pg_terminate_backend 
----------------------
t
(1 row)
postgres=# 

2、内存结构


  • Local memory area--每个后端进程自己使用,主要用于查询

work_mem--用于存放排序和hash结果

maintenance_work_mem--管理工作使用的内存,如VACUUM

temp_buffers--存储临时表

  • Shared memory area--所有进程共同使用,启动数据库后分配的内存

shared buffer pool--存放page,数据库所有操作都在此内存完成

WAL buffer--存放wal日志流

commit log--存放事务状态

内存大小有参数控制
postgres=# select name,setting,source from pg_settings where name like '%work_mem%';
name | setting | source 
----------------------+---------+---------
autovacuum_work_mem | -1 | default
maintenance_work_mem | 65536 | default
work_mem | 4096 | default
(3 rows)
postgres=# select name,setting,source from pg_settings where name like '%buffer%';
name | setting | source 
----------------+---------+--------------------
shared_buffers | 16384 | configuration file
temp_buffers | 1024 | default
wal_buffers | 512 | override
(3 rows)
知道以上内存的作用,进行参数调优

3、数据库启动过程


start数据库后,首先启动Postgres Server Process(postmaster),然后分配共享内存,分配内存后启动必须的后台工作进程,postmaster监听一个端口,等待客户端连接请求

4、客户端连接过程


客户端进程申请连接数据库,postmaster监听连接,通过连接认证后,fork出后台进程backend process代替客户端进程操作数据库

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
1月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的逻辑存储结构
PostgreSQL的逻辑存储结构包括数据库集群、数据库、表空间、段、区、块等。每个对象都有唯一的对象标识符OID,并存储于相应的系统目录表中。集群由单个服务器实例管理,包含多个数据库、用户及对象。表空间是数据库的逻辑存储单元,用于组织逻辑相关的数据结构。段是分配给表、索引等逻辑结构的空间集合,区是段的基本组成单位,而块则是最小的逻辑存储单位。
【赵渝强老师】PostgreSQL的逻辑存储结构
|
1月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据库
PostgreSQL的逻辑存储结构涵盖数据库集群、数据库、表、索引、视图等对象,每个对象有唯一的oid标识。数据库集群包含多个数据库,每个数据库又包含多个模式,模式内含表、函数等。通过特定SQL命令可查看和管理这些数据库对象。
|
26天前
|
存储 SQL 关系型数据库
【赵渝强老师】PostgreSQL的物理存储结构
PostgreSQL在初始化时通过环境变量$PGDATA指定的目录下生成各类文件,构成其物理存储结构,包括数据文件、日志文件(如运行日志、WAL预写日志、事务日志和服务器日志)、控制文件及参数文件等,确保数据库的高效运行与数据安全。
|
1月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的数据库集群
PostgreSQL的逻辑存储结构涵盖了数据库集群、数据库、表、索引、视图等对象,每个对象都有唯一的oid标识。数据库集群是由单个PostgreSQL实例管理的所有数据库集合,共享同一配置和资源。集群的数据存储在一个称为数据目录的单一目录中,可通过-D选项或PGDATA环境变量指定。
|
1月前
|
关系型数据库 分布式数据库 数据库
PostgreSQL+Citus分布式数据库
PostgreSQL+Citus分布式数据库
67 15
|
1月前
|
SQL 关系型数据库 数据库
PostgreSQL性能飙升的秘密:这几个调优技巧让你的数据库查询速度翻倍!
【10月更文挑战第25天】本文介绍了几种有效提升 PostgreSQL 数据库查询效率的方法,包括索引优化、查询优化、配置优化和硬件优化。通过合理设计索引、编写高效 SQL 查询、调整配置参数和选择合适硬件,可以显著提高数据库性能。
381 1
|
6月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
140 13
|
5月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
5月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
192 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
4月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。