postgresql实例结构
postgresql实例结构
postgresql实例简介
- 用来访问postgresql数据库
- 一个实例对应一个数据库集簇
- 由内存和后台进程组成
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
在与复制相关联的进程中,它们执行流式复制