PG INTERNAL-进程与内存架构

翻译http://www.interdb.jp/pg/pgsql02.html

1.进程架构

PostgreSQL是运行在单个主机的多进程架构的c/s类型的关系型数据库管理系统.
一组多进程共同管理一个database cluster.这些进程有以下类型:

  • postgres server process:是所有管理database cluster的相关进程的父进程.
  • backend process:处理已连接客户端的所有请求查询和语句.
  • background processes:不同的background processes处理数据库管理的不同方面的任务(比如,VACUUM,CHECKPOINT等).
  • replication associated processes:它们执行流备份任务.
  • background worker process:9.3版本开始支持,它们可以执行任何用户实现的进程,具体可查看官方文档

下面的图描述了pg的进程架构.
在这里插入图片描述

1.1Postgres Server Process

Postgres Server Process是PG所有进程的父进程.在早期的版本中,它被称为postmaster.
通过执行pg_ctl并且附带启动选项,可以启动一个postgres server process.然后它在内存中分配一块共享区域,启动不同的background processes,如果需要也会启动replication processes和background worker processes,然后等待客户端连接请求.只要它接收到一个客户端请求,它就启动一个backend process,然后这个backend process会处理这个已连接的客户端的所有请求.

postgres server process监听一个网络端口,默认是5432.由于在一个主机可以运行多个PostgresSQL server,每个serve必须设置不同的监听端口.

1.2 Backend Process

一个Backend process也被称为postgres.它与客户端通过一个tcp连接交互,当客户端连接断开后结束.

postgres server process监听到了client连接创建了连接的socket,然后postgres server process fork了backend process,backend process有这个socket的副本可以直接使用,而postgres server process也不会关闭socket,所以可以实现backend process直接与client tcp通信,而不是重新建立连接

由于它只允许操作一个数据库,所以在连接之前要显示的指定数据库.
PostgreSQL允许多个客户端同时连接,参数max_connections控制最大客户端连接数量(默认100).

如果许多客户端比如WEB应用经常重复连接与断开连接,会增加建立连接与创建backend process的代价,因为PostgrSQL还没有实现本地连接池.这会对数据库的性能造成不好的影响.为了处理这种情况,可以使用一个pooling中间件,比如pgbouncer,pgpool-II.

1.3 Background processes

下面的表显示了一组background process.与postgres server和backend process不同,每一个的功能都不同,都不能简单的解释.
在这里插入图片描述

下面显示了实际的PostgreSQL server的进程.
在这里插入图片描述

2.内存架构

PostgreSQL的内存架构可以被分为两大块:

  • Local memory area:每个backend process自己分配的内存.
  • Shared memory area:所有PostgreSQL进程共用的内存.

在这里插入图片描述

2.1 Local Memory Area

每个backend process都会分配local memory area用于查询处理.每个area被分为多个sub-area,大小可以使固定或者可变的.下面的显示了一组组要的sub-areas.
在这里插入图片描述

2. Shared Memory Area

一个共享的区域是由PostgreSQL server启动时候创建的.这块区域被分割成几块大小固定的sub-area.下图显示了几个主要的sub-area.
在这里插入图片描述
除了上面所述的,PostgreSQL还会分配下面几个区域:

  • 为了access control机制分配的sub-areas.
  • 不同的background process使用的sub-areas.比如,checkpointer和autovacuum.
  • 事务处理(比如save-point和tow-phase-commit)使用的sub-area.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值