Postgresql管理系列-进程和内存结构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dazuiba008/article/details/80389220

1.进程结构

Postgresql 是一个C/S架构的关系型数据库,由多个后台进程管理数据库,下面分别介绍一些这些进程

postgres server process  是所有进程的父进程

backend process 每一个客户端的连接都有一个后端进程存在

backgroud processes 为管理数据库而产生的一些进程

backgroud work processes 9.3以后版本开始有这个进程,这里不做详细介绍

进程架构图:


下面简短的介绍一些这几个进程的作用

1.1 postgres server process

正如上所说,是所有进程的父进程,早期的版本叫postmaster.

pg_ctl start执行后,这个进程就会启动,然后,从物理内存中分配内给给shared memory,然后产生很多其他的backgroup processes ,等待客户端来连接,每产生一个连接就会生成一个backend process,一个postgres server process只能监听一个端口,默认端口是5432。尽管一台机器可以运行多个server,但是端口必须不同。

1.2 backend processes

通过TCP协议和客户端建立通讯,当客户端断开时,连接消失。允许多个客户端同时连接,连接数由max_connections参数控制,默认是100,如果客户端频繁的和服务端建立连接然后断开,会增加数据库的开销,导致服务器负载不正常,因为数据库本身不提供连接池的功能,如果有需要,可以使用pgbouncer或者pgpool-II。

1.3 backgroud processes

下面列出了相关的服务端进程,这里只做简单的介绍

Table 2.1: background processes.
process description reference
background writer 进程将shared buffer pool中的脏数据写到磁盘,检查点总能触发这个进程 Section 8.6
checkpointer  在9.2版本以后,检查点会触发产生这个进程 Section 8.6Section 9.7
autovacuum launcher  为vacuum process周期性的调用autovacuum work processes Section 6.5
WAL writer  周期性的从wal buffer刷新数据到磁盘 Section 9.9
statistics collector  收集统计信息进程,比如pg_stat_activity 和pg_stat_database的数据  
logging collector (logger)  将错误信息写入到日志  
archiver  将日志归档的进程. Section 9.10

2.内存架构

在Postgresql中,内存大概被分为两块

Local memory area – 为每一个backend process 分配的内存

Shared memory area – PostgreSQL server 所有的backgroud process使用的内存

 

2.1 Local memory area 

每一个backend process 都会分配一块local memory area, 每一块区域又分为三个子区域 ,见下表

Table 2.2: Local memory area
sub-area description reference
work_mem  用户在sort,distinct,merge join,hash join的时候会用到这块区域 Chapter 3
maintenance_work_mem  vacuum,reindex会用到这块区域 Section 6.1
temp_buffers  存储临时表会用到这块区域  

2.2 Shared memory area 

这块区域在服务器启动的时候分配,这块区域也是分为好几个子区域,见下面介绍

Table 2.3: Shared memory area
sub-area description reference
shared buffer pool  将表或者索引的page从磁盘加载到shared buffer,然后在shared buffer操作 Chapter 8
WAL buffer  在服务端出现问题的时候,确保数据不会丢失,在写到磁盘之前,wal buffer是wal log的缓存区域 Chapter 9
commit log  为了并发控制所有事物的状态的保持而分配的区域

另外,Postgresql还分配一些其他的内存区域:

  • 为访问控制分配的子区域,比如轻量级锁,共享或者专有锁.
  • 为其他backgroud process提供的子区域,比如检查点,vacuum.
  • 为事物处理提供的子区域,比如事物中的保存点,和二阶段事物提交.
















猜你喜欢

转载自blog.csdn.net/dazuiba008/article/details/80389220