Postgresql 进程和内存结构

摘要:
以下介绍了其中的一些过程。Posteserverprocess是所有进程的父进程。后端进程。每个客户端连接都有一个后端进程。后台进程为数据库管理生成一些进程。BackgroundProcesss9.3和更高版本开始使用此过程。1.3后台进程列出了相关的服务器进程。

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

1.进程结构

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

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

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

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

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

进程架构图2.1:

Postgresql 进程和内存结构第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.
processdescriptionreference
background writer进程将shared buffer pool中的脏数据写到磁盘,检查点总能触发这个进程Section 8.6
checkpointer 在9.2版本以后,检查点会触发产生这个进程Section 8.6Section 9.7
autovacuum launcher 为vacuum process周期性的调用autovacuum work processesSection 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使用的内存

Postgresql 进程和内存结构第2张

2.1 Local memory area 

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

Table 2.2: Local memory area
sub-areadescriptionreference
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-areadescriptionreference
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 进程和内存结构》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇total commander【颜色配置】webstorm像idea调试java一样调试npm的js项目下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

mysql常用语句、命令(增删改查功能)

修改数据库的字符集mysql>use mydbmysql>alter database mydb character set utf8;创建数据库指定数据库的字符集mysql>create database mydb character set utf8; 查看database的字符集! show variables like 'coll...

Django——orm概述及在django中使用

一、orm概述1 orm:对象关系映射(跟语言无关) 数据库中的表 ----》对应程序的一个类 数据库中的一行数据----》对应程序中的一个对象 2 python中常见orm框架 -django的orm框架 -sqlachemy orm框架 3 java:(扩展),java中写web项目...

Zabbix优化

参考 zabbix默认的配置即使机器128核心,256内存,只能抗住10-20台的监控,如果再多就需要修改配置了。 一.配置文件 server端配置文件添加如下 StartPollers=160 StartPollersUnreacheable=80 StartTrappers=20 StartPingers=100 StartDiscovere...

PowerDesiGner数据库设计

原文地址:http://hi.baidu.com/shunkunl/blog/item/871c75ef8596faeace1b3e00.html PowerDesign:PowerDesign是 Sybase推出的主打数据库设计工具。PowerDesign致力于采用基于Entiry-Relation的数据模型,分别从概念数据模型 (Conceptual...

java连接数据库时的报错

//java连接数据库时的报错1 package Java数据库编程; 2 3 import java.sql.DriverManager; 4 import java.sql.SQLException; 5 6 import com.mysql.jdbc.Connection; 7 8 public class ConnectionD...

第12组 Alpha冲刺 (1/6)(组长)

1.1基本情况 ·队名:美少女战士 ·组长博客:https://www.cnblogs.com/yaningscnblogs/p/13948281.html ·作业博客:https://edu.cnblogs.com/campus/fzu/FZU_SE_KClass/homework/11440 ·组员人数:7人 1.2冲刺情况汇报 吴凝(组长) 燃尽图...