在本章中,总结了PostgreSQL中的流程体系结构和内存体系结构,以帮助阅读后续章节。如果您已经熟悉它们,可以跳过本章

1.进程结构

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

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

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

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

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

进程架构图2.1:

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

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

这里显示了PostgreSQL数据库的进程信息。在以下示例中,一个postgres服务器进程(pid为9687),两个后端进程(pids为9697和9717)以及表2.1中列出的几个后台进程正在运行。

  1.  
    postgres> pstree -p 9687
  2.  
    -+= 00001 root /sbin/launchd
  3.  
    \-+- 09687 postgres /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
  4.  
    |--= 09688 postgres postgres: logger process
  5.  
    |--= 09690 postgres postgres: checkpointer process
  6.  
    |--= 09691 postgres postgres: writer process
  7.  
    |--= 09692 postgres postgres: wal writer process
  8.  
    |--= 09693 postgres postgres: autovacuum launcher process
  9.  
    |--= 09694 postgres postgres: archiver process
  10.  
    |--= 09695 postgres postgres: stats collector process
  11.  
    |--= 09697 postgres postgres: postgres sampledb 192.168.1.100(54924) idle
  12.  
    \--= 09717 postgres postgres: postgres sampledb 192.168.1.100(54964) idle in transaction

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.
  • 为事物处理提供的子区域,比如事物中的保存点,和二阶段事物提交.

转载自:

https://blog.csdn.net/dazuiba008/article/details/80389220

Postgresql 进程和内存结构的更多相关文章

  1. PostgreSQL进程和内存结构

    PostgreSQL数据库启动时,会先启动一个叫做Postmaster的主进程,还会fork一些辅助子进程,这些辅助子进程各自负责一部分功能,辅助子进程分类如下: $ ps -ef | grep po ...

  2. postgresql进程及内存结

    一.进程和内存架构图 postgresql数据库启动时,先启动一个postmaster的主进程,然后fork出一些辅助子进程. 二.主进程postmaster -bash-4.2$ which pos ...

  3. Windows中进程的内存结构

    基础知识: 栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表.允许插入或删除操作的一端称为栈顶,另一端称为栈底,对栈的插入和删除操作被称为入栈和出栈. 有一组CPU指令可以实现对进程 ...

  4. 面试问题之操作系统:Linux下进程的内存结构

    转载于:http://www.hqj.com/news/emb184.htm Linux操作系统采用虚拟内存管理技术,使得每个进程都有各自互不干涉的进程地址空间.该地址空间是大小为4GB的线性虚拟空间 ...

  5. [转]oracle学习入门系列之五内存结构、数据库结构、进程

    原文地址:http://www.2cto.com/database/201505/399285.html 1 Oracle数据库结构 关于这个话题,网上一搜绝对一大把,更别提书籍上出现的了,还有很多大 ...

  6. PostgreSQL内存结构图示

    磨砺技术珠矶,践行数据之道,追求卓越价值 回到上一级页面:PostgreSQL内部结构与源代码研究索引页    回到顶级页面:PostgreSQL索引页 作者:高健@博客园 luckyjackgao@ ...

  7. 概览JVM的基本结构和JVM内存结构

    概览JVM的基本结构和JVM的内存结构 这里概要介绍一下JVM在启动后,作为操作系统的一个进程的基本结构,以及从操作系统角度看,JVM如何管理它从操作系统里申请来的内存的,也就是JVM的内存结构或者叫 ...

  8. JVM的基本结构和JVM的内存结构

    这里概要介绍一下JVM在启动后,作为操作系统的一个进程的基本结构,以及从操作系统角度看,JVM如何管理它从操作系统里申请来的内存的,也就是JVM的内存结构或者叫JVM内存模型. 1.JVM的基本结构 ...

  9. PG进程结构和内存结构

    ​ 本文主要介绍PostgreSQL数据库(后文简称PG)进程结构和内存结构,物理结构将在后续继续整理分享. ​ 上图描述了PG进程结构.内存结构和部分物理结构的内容.图中的内容包含了两个部分: PG ...

随机推荐

  1. win10+aconda+pytorch

    1.需要建立项目的运行环境,每个项目应用的框架不用,所以对于每个项目分别用运行环境不会造成管理上的混乱以及应用上的冲突 2.建立项目运行环境: a.用管理员身份运行anconda prompt 创建c ...

  2. python基础 — Queue 队列

    queue介绍 queue是python中的标准库,俗称队列. 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换 ...

  3. day35——生产者消费者模型、线程

    day35 进程:生产者消费者模型 编程思想,模型,设计模式,理论等等,都是交给你一种编程的方法,以后你遇到类似的情况,套用即可 生产者消费者模型的三要素 生产者:产生数据的 消费者:接收数据做进一步 ...

  4. werkzeug.routing.BuildError: Could not build url for endpoint 'index'. Did you mean 'user.index' instead?

    werkzeug.routing.BuildError: Could not build url for endpoint 'index'. Did you mean 'user.index' ins ...

  5. REST framework之URL控制

    REST framework之URL控制 一 自定义路由 1.1 原始方式 from django.conf.urls import url from app01 import views urlpa ...

  6. [洛谷P5377][THUPC2019]鸽鸽的分割

    题目大意:有一个圆,圆上有$n$个点,将这几个点两两连接,问最多分成几部分 题解:发现这相当于一个平面图,由欧拉公式得($F$为平面分割块数,$E$为平面图边数,$V$为平面图点数):$$F=E-V+ ...

  7. Spring Cloud Alibaba学习笔记(16) - Spring Cloud Gateway 内置的路由谓词工厂

    Spring Cloud Gateway路由配置的两种形式 Spring Cloud Gateway的路由配置有两种形式,分别是路由到指定的URL以及路由到指定的微服务,在上文博客的示例中我们就已经使 ...

  8. 环境配置 python 3.6+Anaconda+cuda9.0+cudNN7.0+Tensorflow

    最近在摸deepfakes代码,一堆环境要配置,过程记录一下吧. 一.安装Python3.6 Ubuntu16.04系统下默认是python2.7.网上说一般不建议卸载系统自带的python,所以保留 ...

  9. SpirngBoot--错误消息的定制

    在SpringBoot中发生了4xx 5xx之类的错误,SpringBoot默认会发一个/error的请求,该请求由BasicErrorController处理,即在SpringBoot中错误处理也是 ...

  10. bat计算指定文件MD5并输出txt

    @echo off set Name1=*.ADS set Name2=GM_RSSPI* set Name3=equipment* set Name4=protocols* REM 设置输出文件名 ...