暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PG--进程和内存架构

于志君 2024-11-03
134


从上面的架构图可以看出,PG的架构和Oracle是差不多的,都属于进程架构模型,而MySQL属于线程架构模型。

启动PG数据库时,会先启动Postmaster主进程,还会fork出一些辅助子进程,这些子进程各负责一部分功能,主进程会对这些子进程进行管理。

进程介绍:

主进程Postmaster:是数据库实例的总控进程,负责启动和关闭数据库。

用户与数据库建立连接时,是先与postmaster主进程建立连接,此时客户端会发出身份验证消息给postmaster主进程,postmaster主进程会根据消息中的信息进行客户端身份验证,如果验证成功,Postmaster主进程会fork出一个子进程来为该连接服务,这个子进程称之为服务进程。

当某个服务进程出现错误的时候,Postmaster主进程会自动完成系统恢复,系统恢复过程中会停掉所有服务进程,然后进行数据库一致性恢复,恢复完成后才可以进行新的连接。

数据字典pg_stat_activity 可以查询这些服务进程的PID。

postgres=# select pid,datname,usesysid,usename,state,backend_type from pg_stat_activity;

pid | datname | usesysid | usename | state | backend_type

-------+----------+----------+----------+--------+------------------------------

28646 | | | | | autovacuum launcher

28648 | | 10 | postgres | | logical replication launcher

13485 | postgres | 10 | postgres | active | client backend

28644 | | | | | background writer

28643 | | | | | checkpointer

28645 | | | | | walwriter

(6 rows)

Logger进程:此辅助进程通过与Postgres主进程、所有服务进程及其他辅助进程收集所有的stderr输出,并将这些输出写入日志文件中。

postgresql.conf 文件中有参数配置日志文件的大小和保留时间。当达到日志大小或其他条件时会关闭旧的日志,创建新的日志文件。当收到配置文件装载信号(SIGNUP)时,会检查配置文件中的参数log_directory和log_filename与当前配置是否相同,如果不同,会切换日志文件并使用新的配置。

BgWriter进程:把共享内存中的脏页写到磁盘上的进程。它会周期性的进行刷脏。控制此进程的一些参数,在postgresql.conf文件中,以bgwriter_*开头。

WalWriter进程:写WAL日志的进程,WAL日志相当于Oracle的redo log。 日志保存在pg_wal文件目录下。

PgArch进程:归档进程,WAL日志循环使用,防止Wal日志被覆盖,PgArch进程会在日志覆盖前把WAL日志备份出来。

AutoVacuum进程:清理进程,表数据被delete后不会被立即清理,而是做一删除标记,update数据也是在原有数据上更新,而是生成一行新的数据,原有数据做删除标记。这些数据的清理就是有AutoVaccum进程来完成的。

PgStat进程:此进程主要做数据统计信息的收集工作。这些信息包括在一个表或索引上进行了多少次的插入、更新、删除操作,磁盘块读写的次数以及行的读次数。

内存介绍:

共享内存:下图为共享内存中存放的信息。

主要用作数据块的缓冲区,以便提高读写性能,WAL日志缓冲区和CLOG(Commit LOG)缓冲区,还有进程信息,锁信息,全局统计信息等也都存放在共享内存中。

PostgreSQL9.3版本之前使用的System V类型的共享内存,和Oracle一样。

PostgresSQL9.3之后使用mmap()方式的共享内存,这种方式无需配置kernel.shmmax和kernel.shmall参数就可以使用较大的共享内存。

本地内存:

后台服务进程除访问共享内存外,还会申请分配一些本地内存,暂存一些不需要全局存储的数据,主要有以下几个:

临时缓冲区:访问临时表的本地缓冲区。

work_mem:内部排序操作和hash表在使用磁盘文件之前使用的内存缓冲区。

maintenance_work_mem:在维护性操作中使用的内存缓冲区,比如VACUUM和CREATE INDEX等。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论