码迷,mamicode.com
首页 > 数据库 > 详细

PostgreSQL进程和内存结构

时间:2020-08-28 14:43:22      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:buffers   pgpool-ii   复制   end   comm   sharp   collect   RoCE   max   

 
 
进程结构
1、postgres server process是所有PostgreSQL数据库管理的父进程,在早期的版本种称为postmaster。
(1)随着pg_ctl start,postgres server process也随之启动。
(2)分配shared memory
(3)启动一系列后台进程,复制相关的进程,后台工作者进程
(4)当客户端连接的时候,通过调用操作系统命令fork()出一个backend process
(5)监听数据库的端口
 
2、backend process 负责处理客户端连接的请求处理。
(1)必须指定要在连接到PostgreSQL服务器时显式使用的数据库,且只能指定一个db。
(2)允许多个客户端同时连接PostgreSQL服务器,受参数max_connections控制,默认100
(3)如果客户端频繁与服务器端建立和断开链接,增加建立连接和创建后端进程的成本,可使用连接池中间件(pgbouncer 或pgpool-II)进行连接复用。

  

3、backgroud processes 是一系列各种功能特性的执行进程,比如vacuum,checkpoint等等。
(1)background writer,共享内存中的脏页数据被有规律的定期持久化写入到磁盘,在pg9.1和之前版本还充当checkpoint的功能。
(2)checkpointer,在9.2和之后的版本,执行检查点的过程。
(3)autovacuum launcher 申请自动垃圾清理的创建
(4)WAL writer 定期将WAL缓冲区上的WAL数据写入并刷新持久化到磁盘。
(5)statistics collector 收集诸如pg_stat_activity和pg_stat_database等统计信息。
(6)logger 将错误消息写入日志文件
(7)archiver 归档日志

  

4、replication associated processes 复制相关的进程
(1)master端的walsender,
(2)standby端的walreceiver。

  

5、backgroud worker processes,
(1)PostgreSQL启动时候可以通过模块中shared_preload_libraries包含的模块来初始化后台工作者进程。
(2)可动态注册,注册的后台工作者的最大数量受max_worker_processes控制,默认为8。

  

内存结构
1、本地内存(类似于oracle的PGA),每个backend process 分配一个本地存储area,主要包括以下:
work_mem :order by 和distinct操作对元组进行排序,通过merge-join和hash-join操作对表进行连接时使用
maintenance_work_mem :某些维护操作(例如VACUUM,REINDEX)使用
temp_buffers :临时表使用

  

2、共享内存(类似于oracle的SGA),PostgreSQL服务器启动时将分配一个共享内存区域,主要包括以下:
shared_buffers PostgreSQL对表或索引的操作都是在内存中进行的,如果访问的相关数据或者索引不在此区域,将从持久性存储加载到此处,并直接对其进行操作。
WAL buffer  是在写入磁盘之前WAL数据的缓冲区
commit log  pg_xact记录所有事务的状态,事务进行中,已提交,已回滚。

  

 

PostgreSQL进程和内存结构

标签:buffers   pgpool-ii   复制   end   comm   sharp   collect   RoCE   max   

原文地址:https://www.cnblogs.com/imdba/p/13554507.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!