postgresql-体系结构

1、体系结构

体系结构主要由实例和存储结构组成,而实例由进程和内存结构组成;存储结构分为逻辑存储结构和物理存储结构。

2、进程结构

查看运行进程信息

$ ps -ef | grep postgre
postgres   1161      1  0 15:10 ?        00:00:00 /opt/postgres/bin/postgres -D /pgdata
postgres   1163   1161  0 15:10 ?        00:00:00 postgres: checkpointer   
postgres   1164   1161  0 15:10 ?        00:00:00 postgres: background writer   
postgres   1165   1161  0 15:10 ?        00:00:00 postgres: walwriter   
postgres   1166   1161  0 15:10 ?        00:00:00 postgres: autovacuum launcher   
postgres   1167   1161  0 15:10 ?        00:00:00 postgres: stats collector   
postgres   1168   1161  0 15:10 ?        00:00:00 postgres: logical replication launcher  
  • portmaster 主进程,是整个数据库实例的总控制进程,负责启动和关闭数据库实例。通过运行 postgres 命令加上合适的参数启动数据库。实际上,postmaster 命令是一个指向 postgres 的链接。虽然平时更多的是使用 pg_ctl 启动数据库,实际上也是通过运行 postgres 启动数据库,只是做了一些封装,更容易操作数据库实例。postmaster 会 fork 一些与数据库实例相关的辅助子进程,并管理它们。

查看进行信息

test=# select pid,wait_event,backend_type from pg_stat_activity;
  • syslogger 进程,在 postgresql.conf 里启用运行日志 pg_log 后,会有syslogger 进程。syslogger 进程会在日志文件达到指定的大小时关闭当前的日志文件,产生新的日志文件。

postgersql.conf 中配置参数如下:

log_destination : 配置日志输出目标,不同的运行平台对应不同的值,Linux 默认为stderr。

logging_collector : 是否开启日志收集器,设置为 on 时启动日志功能,否则将不产生系统日志辅助进程。

log_directory : 配置日志输出文件夹。

log_filename : 配置日志文件名称命名规则。

log_rotation_size : 配置日志文件大小。达到这个大小,即创建一个日志文件记录日志信息。

  • bgwriter 后台写进程,在后台将脏页刷新到磁盘的辅助进程。

  • walwriter 预写式日志WAL,先记录日志后写数据。

  • pgarch 归档进程,从 postgresql 8.X 开始,有了 PITR(point-in-time-recovery)技术,该技术支持将数据库恢复到其运行历史中任意一个有记录的时间点;PITR 另一个重要的就是对WAL文件进行归档。postgresql 默认是非归档模式,需要启用。

  • autovacuum 自动清理进程,在 PG 数据库中,对数据进行update 或者delete 操作,数据库不会立即删除旧版本的数据,而是标记为删除状态。支持多版本机制,当旧版本数据没有价值了,需要清理垃圾数据腾出空间。

  • pgstat 统计信息收集进程,收集数据库运行期间的统计信息。

  • checkpoint 检查点进程。

3、内存结构

内存结构分为本地内存和共享内存。

本地内存(PGA):每个后端进程自己使用的。

  • work_mem,使用 work_mem 区域用于对元组的排序,比如 order by、distinct 操作。也用于表的 join 操作,比如 merge-join、hash-join 操作,默认是 4MB。

  • maintenance_work_mem 用于一些维护操作。比如 vacuum、reindex、alter table add foreign key。默认64MB。

  • temp_buffers 存放临时表,默认是8MB。该参数设置每个数据库会话使用的临时缓冲区的最大值。

共享内存(SGA),所有进程共同使用。

  • shared buffer PG将表和索引中的页面从持久存储加载到共享缓冲池中进行操作,默认128MB。

  • wal buffer 存放wal数据

  • commit log 提交日志保存所有事物的状态,是并发控制机制的一部分。事务有 in_progress、commited、aborted、sub-commited 四种状态。

4、存储结构
  • 逻辑存储结构是内部的组织和管理数据的方式;

  • 物理存储结构是操作系统中组织和管理数据的方式。

4.1 逻辑存储结构

所有数据库对象都有各自的oid(object identifiers),oid是一个无符号的四字节整数,数据库的oid和表的oid分别存放在pg_database,pg_class表中。

  • 数据库,在PG中,数据库本身也是数据库对象,并且在逻辑上彼此分离,除数据库之外的其他数据库对象,例如表、索引等,都属于他们各自的数据库。

  • 表空间, 数据库在逻辑上分成多个存储单元,称作表空间。表空间用作把逻辑上相关的结构放在一起。数据库逻辑上是由一个或多个表空间组成。初始化会自动创建pg_default和pg_global两个表空间。

postgres=# db
              List of tablespaces
    Name    |  Owner   |        Location
------------+----------+------------------------
 pg_default | postgres |
 pg_global  | postgres |
(2 rows)

其中:
pg_global:用于存放系统表。
pg_default:该表空间的物理文件存储在数据目录中的base目录中。

创建自己的表空间

创建自己的表空间,并在该表空间上创建表
create tablespace testdb location '/data/postgres/data/tbs';
create table test_table(tid int primary key,tname text) tablespace testdb;
  • 模式,当创建一个数据库时,会为其创建一个名为public的默认schema。schema是数据库中的命名空间,在数据库中创建的所有对象都是在schema中创建。

查看当前数据库的模式

postgres=# dn
  List of schemas
  Name  |  Owner
--------+----------
 public | postgres
  • 段,一个段是分配给一个逻辑结构(一个表、一个索引或其他对象)的一组区,是数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。

  • 区,区是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成。第一个段是由一个或多个盘区组成。当一段中间所有空间已完全使用,PostgreSQL为该段分配一个新的范围。

  • 块(页),数据块是PostgreSQL 管理数据文件中存储空间的单位,为数据库使用的I/O的最小单位,是最小的逻辑部件。默认值8K。

  • 数据库对象,如:表、视图、索引、序列、函数等等。在PostgreSQL中的所有数据库对象都由各自的对象标识符(OID)进行内部的管理。

posted @   原来是你~~~  阅读(85)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示