postgresql实例结构

发布时间 2023-12-23 14:05:42作者: _林鹿

postgresql实例结构

postgresql实例简介

  1. 用来访问postgresql数据库
  2. 一个实例对应一个数据库集簇
  3. 由内存和后台进程组成

postgresql初始化参数文件

文件中有两种类型的参数

1. 显式:在文件中对参数进行设置
2. 隐式:文件中没有设置,使用postgres默认值

可以存在多个初始化参数文件

静态参数文件:postgresql.conf
- 说明:
	1. 该文件为文本文件
	2. 需要使用操作系统vi编辑器手动修改
	3. 更改将在下次启动时生效
	4. 仅在实例启动期间读取
	5. 默认位置为$PGDATA

动态参数文件:postgresql.auto.conf
说明:
1. 该文件为文本文件,由postgres服务器维护
2. 支持用文本编辑器修改,但不推荐
3. alert system命令修改的参数保存在该文件中
4. 能够在关闭和启动期间持续进行更改
5. 可以实现自我调整参数值
6. 默认位置为$PGDATA

参数生效条件:
1. sighup:表示需要超级管理员修改,reload就能够生效
2. superuser:表示需要超级管理员修改,可以为普通用户、数据库或者超级管理员自己修改
3. postmaster:表示需要超级管理员修改,需要重启才能够生效
4. user:表示普通用户可以修改该参数,立即生效

可选参数文件:postgresql.conf.user
需要在postgresql.conf中指定后才可以使用

文件读取顺序

postgresql.conf -> postgresql.auto.conf -> postgresql.conf.user

postgresql内存结构

Local memory area

本地内存区域,由每个后端进程分配给用户使用

work_mem:工作区域

排序、distinct操作、多表连接时需要使用

maintenance_work_mem:维护工作区域

在VACUUM,REINDEX时需要使用

temp_buffers:临时缓存区域

用于存储临时表

Shared memory area

共享内存区域,由postgresql服务器的所有进程使用

shared buffer pool:共享缓存池

用于存放从数据库中读取的数据块和sql语句执行计划

WAL buffer:日志记录缓冲区

commit log:记录事务状态

postgresql后台进程

postgres server process

postgres服务器进程是与数据库集群管理相关的所有进程的父进程,早期版本被称为"postmaster"

  • pg_ctl使用程序启动该进程,然后派生出各个后台进程,同时分配共享内存区域
  • 一个postgres服务器进程侦听一个网络端口,默认端口为5432

backend process

后端进程(也称为postgres)由postgres服务器进程启动,并处理一个连接的客户端发出的所有查询

postgresql允许多个客户端同时连接:配置参数max_connections可以控制客户端的最大连接数

background writer:后台写进程
 触发条件
 1.脏数据缓存达到阈值
 2.空闲缓存不足
 3.超时
checkpointer:检查点进程
 触发条件
 1.写入脏数据缓存
 2.将检查点信息更新到日志文件
 3.将检查点信息更新到控制文件
 4.对数据库热备时
autovacuum launcher:系统自动清理进程
WAL writer:预写式日志写进程
backend process会将请求先写入缓冲区,再写入日志文件
 触发条件
 1.提交事务时
 2.缓冲区空间不足
 3.超时
statistics collector:统计数据收集进程
logging collector(logger):日志收集进程
archiver:归档进程(只有在配置归档模式后才会有)

background processes

各种后台进程执行用于数据库管理的每个特性的进程(例如清空和检查点进程)

replication associated processes

在与复制相关联的进程中,它们执行流式复制