Postgresql的体系结构(三)
Postgresql 系列博文讲解(B站同步介绍教学:https://space.bilibili.com/282421760)
支持一下,关注一波微信公众号:【 钥道不止 】
1. PG的体系结构
Postgresql与Oracle都是使用共享内存的进程结构,而MysqL是线程模型。
1.1. Postmaster进程
守护进程,实际上是第一个postgres进程,主要职责有:
1.2. postgres进程
实际上是postgres的子进程:
1.3. 本地内存
本地内存是服务器进程独占的内存结构,每个postgre子进程都会分配一小块相应内存空间,随着连接会话的增加而增加,它不属于实例的一部分。
- work memory:用于排序的内存
- maintenance work memory:内部运维工作的内存,如VACUUM垃圾回收、创建和重建索引
- temp buffer:用于存储临时表的数据
1.4. 数据库实例(INSTANCE)
1.4.1. 共享内存
- Shared buffer
用于缓存表和索引的数据块。
数据的读写都是直接对buffer操作,若所需的块不在缓存中,则需要从磁盘中读取。
在buffer中被修改过的,但又没有写到磁盘文件中的块被称之为脏块。
大小由shared_buffers参数控制。 - WAL(Write Ahead Log) buffer:预写日志缓存
用于缓存增删改等写操作产生的事务日志。
大小由wal_buffers参数控制 - Clog buffer:日志缓存
Commit Log Buffer是记录事务状态的日志缓存 - Stats buffer
- Other buffer
1.4.2. 辅助进程
- Backgroup write:后台写进程(BgWrite),LRU算法清理脏页,将shared buffer中的脏数据页写到磁盘文件中
- AutoVacuum launcher/workers:系统自动清理进程(自动清理垃圾回收进程)
当参数autovacuum设为on的时候启用自动清理功能。
Launcher为清理的守护进程,每次启动的时候会调用一个或多个worker。
Worker是负责真正清理工作的进程,由autovacuum_max_workers参数设定其数量。 - WAL Writer:预写式日志进程,将预写日志写入磁盘文件
触发时机:
• WAL BUFFER满了;
• 事务commit时;
• WAL writer进程到达间歇时间时;
• checkpoint发生时。 - Checkpointer:检查点进程
用于保证数据库的一致性
它会触发bgwriter和wal writer动作 - Archiver:归档进程(PgArch)
用于将写满的WAL日志文件转移到归档目录,该进程只有在归档模式才会启用 - SysLogger:系统日志进程
采集Postgresql的运行状态,并将运行日志写入日志文件;
logging_collector参数为on时启动,不建议关闭;
log_directory设定日志目录;
log_destination设定日志输出方式,甚至格式;
log_filename设定日志文件名;
log_truncate_on_rotation设定是否重复循环使用且删除日志;
log_rotation_age设定循环时间;
log_rotation_size设定循环的日志尺寸上线。 - WAL Sender/Receiver
- Stats collector:统计信息收集进程(PgStat)
收集表和索引的空间信息和元组信息等,甚至是表的访问信息。收集到的信息能被优化器和autovaccum利用,甚至给数据库管理员作为数据库管理的参考信息。
1.5. Database Cluster
- 这里的database cluster并非数据库集群,而是数据库簇,即数据库。Postgresql在磁盘上的一整套文件集合叫做database cluster。
- 数据库包含了数据文件、日志文件等多种文件,用于存储用户数据和保证数据一致性。
1.6. 查询验证
# 进入postgres用户
su - postgres
# 查看postgres进程
ps -ef | grep postgres
2. PG的数据目录结构
-
PG_VERSION 是当前数据库数据格式对应的版本号
-
_vm结尾的文件是数据文件对应的VM(visibility map),在做多版本并发控制时是通过在元组头上标识“已无效”来实现删除或更新的,最后通过VACUUM功能来清理无效数据回收空闲空间。
-
pg_hba.conf:客户端认证配置文件,可以配置客户的连接协议、加密方式、ACL等等
-
pg_wal:WAL日志目录。
-
pg_xact:Commit log目录。V9版本以前为pg_clog目录。
-
postgresql.auto.conf:也是参数配置文件,所有通过alter命令修改的命令,都会保存在这个文件中,该文件中的参数将会覆盖postgresql.conf文件相同参数的值,该文件为二进制
-
表空间目录可以任意指定,结构与base目录类似
3. PG的层级结构
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。