
文章插图
如果通过pstree命令查看进程之间的关系,你会发现Postmaster进程是其他所有进程的父进程 。

文章插图
Background Process
(归档)
WAL日志会被循环使用,PgArch在归档前会把WAL日志备份出来 。通过PITR(Point in Time Recovery)技术,可以对数据库进行一次全量备份后,该技术将备份时间点之后的WAL日志通过归档进行备份,使用数据库的全量备份再加上后面产生的WAL日志,即可把数据库向前推到全量备份后的任意一个时间点 。
PgStat进程
(统计数据收集)
做数据的统计收集工作 。主要用于查询优化时的代价估算,包括一个表和索引进行了多少次的插入、更新、删除操作,磁盘块读写的次数、行的读次数 。pg_statistic中存储了PgStat收集的各类信息 。
AutoVacuum进程
(自动清理)
在PostgreSQL数据库中,对表进行DELETE操作后,旧的数据并不会立即被删除,并且,在更新数据时,也并不会在旧的数据上做更新,而是新生成一行数据 。旧的数据只是被标识为删除状态,只有在没有并发的其他事务读到这些旧数据时,它们才会被清除 。这个清除工作就由AutoVacuum进程完成 。
BgWriter进程
(后台)
页写到磁盘上的进程 。主要是为了提高插入、更新和删除数据的性能 。
Wal Writer进程
(预写式日志)
WAL(Write Ahead Log,预写式日志),在修改数据之前把修改操作记录到磁盘中,以便后面更新实时数据时就不需要数据持久化到文件中 。
CheckPoint进程
(检查点)
检查点是系统设置的事务序列点,设置检查点保证检查点前的日志信息刷到磁盘中 。
Syslogger进程
(系统日志)
需要在Postgres.conf中logging_collection设置为on,此时主进程才会启动Syslogger辅助进程 。
Backend Process
最大后台链接数通过max_connections参数设定,默认值为100 。后端进程用于处理前端用户请求并返回结果 。查询运行时需要一些内存结构,就是所谓的本地内存(local memory) 。本地内存涉及的主要参数有:
work_mem:用于排序、位图索引、哈希链接和合并链接操作 。默认值为4MB 。
maintenance_work_mem:用于vacuum和创建索引操作 。默认值为64MB 。
temp_buffers:用于临时表 。默认值为8MB 。
Client Process
客户端进程需要和后端进程配合使用,处理每一个客户链接 。通常情况下,Postmaster进程会派生一个子进程用来处理用户连接 。
数据库结构数据库相关概念:
- PostgreSQL由一系列数据库组成 。一套PostgreSQL程序称之为一个数据库群集 。
- 当initdb()命令执行后,template0 , template1 , 和postgres数据库被创建 。
- template0和template1数据库是创建用户数据库时使用的模版数据库,他们包含系统元数据表 。
- initdb()刚完成后,template0和template1数据库中的表是一样的 。但是template1数据库可以根据用户需要创建对象 。
- 用户数据库是通过克隆template1数据库来创建的;
- initdb()后马上创建pg_default和pg_global表空间 。
- 建表时如果没有指定特定的表空间,表默认被存在pg_default表空间中 。
- 用于管理整个数据库集群的表默认被存储在pg_global表空间中 。
- pg_default表空间的物理位置为$PGDATAbase目录 。
- pg_global表空间的物理位置为$PGDATAglobal目录 。
- 一个表空间可以被多个数据库同时使用 。此时,每一个数据库都会在表空间路径下创建为一个新的子路径 。
- 创建一个用户表空间会在$PGDATApg_tblspc目录下面创建一个软连接,连接到表空间制定的目录位置 。
- 每个表有三个数据文件 。
- 一个文件用于存储数据,文件名是表的OID 。
- 一个文件用于管理表的空闲空间,文件名是OID_fsm 。
- 一个文件用于管理表的块是否可见,文件名是OID_vm 。
- 索引没有_vm文件,只有OID和OID_fsm两个文件
推荐阅读
- docker MySQL数据库的备份与还原,以及每天定时自动备份
- Yandex 在 GitHub 开源 YDB 数据库
- MySql索引 | 什么是索引呢?索引是什么样子的?
- SQL如何删除重复数据
- 企业级分布式数据库 TDSQL 元数据管控与集群调度
- Wi-Fi体系知识
- mysql误删除恢复
- 故障分析 | 数据库故障 MHA 未切换
- 数据库 SQL 约束之 NOT NULL
- 手把手带你撸一个最简单实时数据库
